Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

Instrucciones predefinidas con la biblioteca mysqli

Estas en el tema de Instrucciones predefinidas con la biblioteca mysqli en el foro de Frameworks y PHP orientado a objetos en Foros del Web. La blibioteca mysqli admite el uso de instrucciones predefinidas. A parte de que evitan radicalmente las inyecciones sql cuentan con otras ventajas. Primero voy a ...
  #1 (permalink)  
Antiguo 16/09/2008, 09:13
 
Fecha de Ingreso: septiembre-2007
Mensajes: 184
Antigüedad: 16 años, 7 meses
Puntos: 4
Instrucciones predefinidas con la biblioteca mysqli

La blibioteca mysqli admite el uso de instrucciones predefinidas. A parte de que evitan radicalmente las inyecciones sql cuentan con otras ventajas.
Primero voy a mostrar un codigo que funciona correctamente haciendo uso de esta tecnica y despues voy a mostrar otro en el que tengo problemas y necesitaria ayuda.

Supongamos que tenemos un documento php que sirve para procesar los datos enviados por el usuario desde una pagina con formulario.
El objetivo de este documento php es insertar una fila nueva en una tabla de la base de datos con los diferentes valores aportados por el usuario.
Dentro del documento php, los comandos que ejecutarian esta insercion de la fila en la tabla son los siguientes;

Código PHP:
... 
 @ 
$db = new mysqli ('localhost''usuario''clave''b_datos');
if (
mysqli_connect_errno()) 
  {
     echo 
'Error: No fue posible conectarse a la base de datos.';
     exit;
  }

  
$query "insert into nombre_de_tabla values (?, ?, ?, ?)";
  
$stmt $db->prepare($query);
  
$stmt->bind_param ("sssd"$cadena1$cadena2$cadena3$numeral);
  
$stmt->execute();
  echo 
$stmt->affected_rows.' linea insertada correctamente en la tabla.';
  
$stmt->close(); 
... 
Este codigo me funciona y se logra el objetivo de insertar una fila en la tabla deseada y posteriormente mostrar el mensaje en pantalla de "1 linea insertada correctamente en la tabla".

El problema me surge cuando quiero utilizar una tecnica similar en vez de para vincular parametros , hacerlo con resultados en consultas de tipo select.

Por ejemplo, supongamos que tenemos un documento xhtml con un formulario utilizado para buscar dentro de una base de datos. Este formulario tendria un menu despegable para refinar la busqueda en una columna concreta de la tabla y un input="text" para recoger la palabra(s) de busqueda tecleada por el usuario.
El documento php que se encarga de procesar el formulario mostraria en pantalla en orden numerico los resultados.

La tabla productos contendria las columnas producto, marca, isbn y precio. En el menu despegable habria un valor a elegir que coincidiria con producto, marca o isbn que se pasaria como variable $columna , junto con las palabras introducidas por el usuario en el campo de texto que se pasaria como variable $busqueda.

Código PHP:
...
  @ 
$db = new mysqli('localhost''usuario''clave''b_datos');
  
  if (
mysqli_connect_errno()) 
  {
     echo 
'Error: No hay conexion.';
     exit;
  }
  
   
$query "select * from productos where ".$columna." like '%".$busqueda."%'";
   
$stmt $db->query($query);
   
$num_resultados $stmt->num_rows;
  

  echo 
'<p>Numero de productos encontrado : '.$num_resultados.'</p>';


  for (
$i=0$i <$num_results$i++)
  {
   
$stmt->bind_result ($producto$marca$isbn$precio);
   
$stmt->execute();
   
$row $stmt->fetch();

     echo 
'<p>'.($i+1).'. Producto: ';
     echo 
$row['producto'];
     echo 
'<br />Marca: ';
     echo 
$row['marca']);
     echo 
'<br />ISBN: ';
     echo 
$row['isbn']);
     echo 
'<br />Precio: ';
     echo 
$row['price'];
     echo 
'</p>';
  }

  
$stmt->close(); 
... 

Este codigo genera el numero correcto de coincidencias pero me muestra el mensaje de error siguiente;
Fatal error: Call to undefined method mysqli_result::bind_result() in C:\Program Files\url\www\resultadoss.php on line 67, ademas de no generar en pantalla los resultados de la consulta.

No estoy seguro si $stmt = $db->query($query); es el metodo correcto a usar en este caso, ni del orden correcto de las 3 primeras lineas del bucle for
y tampoco estoy seguro si este formato "echo $row['producto'];" devolveria los datos correctos ni si es necesario colocar interrogantes como en el ejemplo de codigo anterior. Tampoco estoy seguro si esto es debido en parte a un bug de mysqli que afecta a la plataforma windows.

Estoy corriendo en local windows/apache la version php 5.2.0. y mysql 5.0.27-community-log y soy nuevo con la programacion php asi que toda ayuda que pueda indicarme fallos sera bienvenida y si alguien me podria dar la solucion correcta se lo agradeceria mucho.
  #2 (permalink)  
Antiguo 16/09/2008, 09:22
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Instrucciones predefinidas con la biblioteca mysqli

Hola feral,

La forma correcta seria:
Código php:
Ver original
  1. $db = new mysqli('localhost', 'usuario', 'clave', 'b_datos');
  2.  
  3.   {
  4.      echo 'Error: No hay conexion.';
  5.      exit;
  6.   }
  7.  
  8.    $query = "select * from productos where ".$columna." like '%".$busqueda."%'";
  9.    $stmt = $db->prepare($query)
  10.    $stmt->execute();
  11.    $num_resultados = $stmt->num_rows;
  12.    $stmt->bind_result ($producto, $marca, $isbn, $precio);
  13.  
  14.   echo '<p>Numero de productos encontrado : '.$num_resultados.'</p>';
  15.  
  16.  
  17.   while($stmt->fetch())
  18.   {
  19.    
  20.  
  21.      echo '<p>'.($i+1).'. Producto: ';
  22.      echo $producto;
  23.      echo '<br />Marca: ';
  24.      echo $marca;
  25.      echo '<br />ISBN: ';
  26.      echo $isbn;
  27.      echo '<br />Precio: ';
  28.      echo $precio;
  29.      echo '</p>';
  30.   }
  31.  
  32.   $stmt->close();
  33.  
  34.   $db->close();

Tema trasladado a PHP Orientado a Objetos.
  #3 (permalink)  
Antiguo 16/09/2008, 12:59
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 18 años, 11 meses
Puntos: 32
Respuesta: Instrucciones predefinidas con la biblioteca mysqli

Niak! ¿Cómo se formateó el código fuente de esta manera?
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
  #4 (permalink)  
Antiguo 16/09/2008, 13:01
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Instrucciones predefinidas con la biblioteca mysqli

@enrique: http://www.forosdelweb.com/f18/nuevo...geishi-624896/

Saludos.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 06:09.