Página 1 de 1

Agregado bind_params en TMYSQL - Nuevo !!!

Publicado: Mar Dic 22, 2020 4:30 pm
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();