Agregado bind_params en TMYSQL - Nuevo !!!

Esta es una libreria en PHP para desarrollo de aplicaciones WEB
Avatar de Usuario
administrador
Site Admin
Mensajes: 74
Registrado: Mar Nov 24, 2020 1:56 am
Contactar:

Agregado bind_params en TMYSQL - Nuevo !!!

Mensaje por administrador »

Buenos dias,

Se agrego a la clase TMySQL el method "$mysql->bind_params( $sql (string), $params(array JSON), $isSelect (boolean) )".

Este method nos facilita hacer un INSERT, UPDATE y SELECT en nuestra database ya que controla de manera automatica los ataques
"injection SQL" porque prepara y depura la consulta antes de ser invocada eliminando los scripts que los hackers
pudieran ingresar en nuestras aplicaciones en los campos INPUT como en un login por ejemplo.

El method se usa de la siguiente manera. (Este es un ejemplo usando SELECT)

1- Creamos la consulta con nuestro string $sql :
$sql = "SELECT id, user, password, name_user FROM users WHERE user = ? AND password = ?"
Como ven tenemos nuestros parametros "?" que seran reemplazados con los valores que se pasan en el method "bind_params"

2- Pasamos los parametros a el method "bind_params".
El primer parametro es el string del query ($sql), el segundo parametro es un un array JSON que tendra 2 posiciones :
La primera indica el tipo de parametro.

i la variable correspondiente es de tipo entero
d la variable correspondiente es de tipo double
s la variable correspondiente es de tipo string
b la variable correspondiente es un blob y se envía en paquetes


Y la segunda el contenido del parametro, para el ejemplo anterior seria asi :
['s' => 'demo', 's' => 'demo1234']

3- Y en el tercer parametro le indicamos si la consultas es un SELECT (false) o UPDATE / INSERT (true), si no se agrega el tercer
parametro el lo toma como false por defecto. Para el caso de ser INSERT/UPDATE (true) entonces el method hace un begin transaction, commit y roollback en caso de que halla un fallo.

La sintaxis de uso es asi : $mysql->bind_params( $sql, $params, false )

Aqui el codigo completo de un ejemplo funcionando :

Código: Seleccionar todo


  $folio = '2000';
  $rows = 200;
  
  $sql = "SELECT a.folio,
                 (SELECT b.nombre 
                  FROM facturas AS b
                  WHERE a.folio = b.folio
                  LIMIT 1) AS nombre,
                 a.codigo,
                 a.nombre AS descripcion,
                 a.cantidad,
                 a.precio_unit,
                 a.importe
          FROM facturas_detalle AS a
          WHERE a.folio = ?
          LIMIT ?";

  $conex = new TMysql( DB_SERVER, DB_USER, DB_PSW, DB_DATABASE );  

  $aRet = [];
  $aRow = [];

  $params = [ 's' =>  $folio,  'i' => $rows];

  if ( $conex->bind_params( $sql, $params ) ) {

    while ( $row = $conex->getrow() ) {
      $aRow[] = [ 'folio'       => $row['folio'], 
                  'nombre'      => $row['nombre'], 
                  'codigo'      => $row['codigo'],
                  'descripcion' => $row['descripcion'],
                  'cantidad'    => $row['cantidad'], 
                  'precio'      => $row['precio_unit'], 
                  'importe'     => $row['importe'] ];
    }                    
  
    $aRet = [ 'result' => true, 'data' => $aRow ];

  } else {

    $aRet = [ 'result' => false ];	  

  }  

  $conex->close();

Saludos.

Albeiro Valencia
Imagen Bienvenidas las Donaciones Gracias https://www.paypal.me/valenciaim5

Responder