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

Sobre MySQLi y los prepared statements

Estas en el tema de Sobre MySQLi y los prepared statements en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Buenas, Actualmente esoy planteandome pasar de mysql a mysqli, y tengo algunas dudillas al respecto. He estado mirando y en casi todos sitios pone que ...
  #1 (permalink)  
Antiguo 13/10/2008, 12:45
 
Fecha de Ingreso: noviembre-2002
Mensajes: 1.341
Antigüedad: 21 años, 5 meses
Puntos: 17
Sobre MySQLi y los prepared statements

Buenas,

Actualmente esoy planteandome pasar de mysql a mysqli, y tengo algunas dudillas al respecto.

He estado mirando y en casi todos sitios pone que es mejor realizar las querys con prepared statements, por temas de rendimiento (entre otras cosas). ¿Realmente merece la pena hacer las consultas de esta manera?

Por otra parte, a la hora de realizar las querys en los tres pasos (preparación, parámetros y ejecución), ¿la clase se encarga de validar los datos? es decir, ¿sigue siendo necesario un mysql_real_escape()?

Entiendo que brinda más seguridad, ya que en todo momento le decimos qué tipo de parámetros vamos a pasarle... por lo que supongo (y sólo supongo) que si se intenta inyectar SQL lo detectará, ¿no?

Saludos.
  #2 (permalink)  
Antiguo 13/10/2008, 13:23
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: Sobre MySQLi y los prepared statements

Hola Keysher,

Aun cuando uses prepared statements, debes de verificar por SQL Inyection, aunque es menos probable, aun es posible asi que no te fies, es mejor comprobar el valor recuerda la regla: Nunca confiar en el contenido que te envie el usuario.

Saludos.
  #3 (permalink)  
Antiguo 13/10/2008, 13:38
 
Fecha de Ingreso: noviembre-2002
Mensajes: 1.341
Antigüedad: 21 años, 5 meses
Puntos: 17
Respuesta: Sobre MySQLi y los prepared statements

Sí, lo sé, esa es la mejor máxima, nunca fiarse de los datos de entrada. Lo que me recuerda al típico refŕan de "Si lo haces a pruebas de idiotas, te toparás con un idiota mejor".

Lo preguntaba por si esos métodos ya hacían esa validación (hay que ser cauto, pero tampoco es muy recomendable duplicar comprobaciones).

Siendo clases, supongo que no sería muy complicado crear una clase que herede mysqli e implementar un método que, además de preparar el statement, también compruebe los campos para evitar sorpresas.

Gracias y un saludo!!
  #4 (permalink)  
Antiguo 14/10/2008, 13:22
 
Fecha de Ingreso: noviembre-2002
Mensajes: 1.341
Antigüedad: 21 años, 5 meses
Puntos: 17
Respuesta: Sobre MySQLi y los prepared statements

Siguiendo con esto...

¿Realmente merece la pena usar los statements?

Me refiero a que pare realizar una simple query hay que hacer unos cuantos pasos:

Código php:
Ver original
  1. $stmt = mysqli_stmt_init($link);
  2. mysqli_stmt_prepare($stmt, 'SELECT campo FROM Tabla WHERE otroCampo=?')
  3. mysqli_stmt_bind_param($stmt, "s", $otroCampo);
  4. mysqli_stmt_bind_result($stmt, $campo);
  5. //el bucle que sea...
  6.     mysqli_stmt_fetch($stmt);
  7.     echo ($campo);
A esto habría que añadirle un mysqli_real_escape_string() de los campos del query....

¿Es todo esto necesario?

Estoy planteando alguna forma de automatizar todo en algún método de una clase, pero es complicado, se necesitan variables de entrada... los tipos de estas variables... la query.... las variables de salida.... es un poco coñazo.
  #5 (permalink)  
Antiguo 14/10/2008, 14:03
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: Sobre MySQLi y los prepared statements

Te recomiendo veas Zend_Db y PDO, te pueden hacer la vida más fácil .

Saludos.
  #6 (permalink)  
Antiguo 14/10/2008, 14:31
 
Fecha de Ingreso: noviembre-2002
Mensajes: 1.341
Antigüedad: 21 años, 5 meses
Puntos: 17
Respuesta: Sobre MySQLi y los prepared statements

Los tenía por ahí apuntaditos para echarles un ojo.... pero tengo la manía de intentar hacer yo a mno todo (no por reinventar la rueda sino para aprender más y manejarme mejor).

Los miraré a ver si consigo implementar algo decente yo... aunque si no consigo gran cosa usaré alguno (o utilizaré mysqli a la vieja usanza).

Gracias y un saludo.
  #7 (permalink)  
Antiguo 14/10/2008, 15:48
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: Sobre MySQLi y los prepared statements

Esque ya tu mismo te diste el tope, tienes que hacer todo eso para solo un simple select, eso es casi "hacerlo a mano", y si usas PDO o Zend_Db (recomendado), entonces estas ocupando la capa de abstracción más arriba.

Saludos.
  #8 (permalink)  
Antiguo 14/10/2008, 16:08
 
Fecha de Ingreso: noviembre-2002
Mensajes: 1.341
Antigüedad: 21 años, 5 meses
Puntos: 17
Respuesta: Sobre MySQLi y los prepared statements

Sí, eso es. Aunque la intención es que esa capa la cree yo mismo, ya sea con una clase nueva desde cero o una que herede mysqli.....

De momento prefiero crearlas yo aunque sean más simples que las prefabricadas, pero es la única forma de habituarse a un lenguaje de programación y coger soltura (y en mi caso el PHP es un hobbie al que no puedo dedicar todo el tiempo que me gustaría).

Ahora mismo no me interesa una clase muy compleja para las conexiones con la BDD, con poder hacer querys y un par de cosillas más me vale, así que lo intentaré yo (probablemente con una clase propia que herede de mysqli).

Mañana cuando tenga un rato miraré PDO y Zend_DB, a ver si puedo reutilizar o adaptar alguna clase...

Graciar por los consejos!
  #9 (permalink)  
Antiguo 14/10/2008, 16:27
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: Sobre MySQLi y los prepared statements

Por nada, espero puedas adaptarte a usar Zend_Db (aunque sea como hobbie) o que crees tu clase.

Saludos.
  #10 (permalink)  
Antiguo 27/11/2008, 09:38
 
Fecha de Ingreso: noviembre-2008
Mensajes: 4
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: Sobre MySQLi y los prepared statements

como puedo hacer un select en php con "Mysql" usando prepared statements?,
pero ojo "Mysql" no "Mysqli"...
  #11 (permalink)  
Antiguo 27/11/2008, 12:27
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: Sobre MySQLi y los prepared statements

No es posible, la extensión de MySQL no soporta prepared statements, necesitas usar PDO o MySQLi.

Saludos.
  #12 (permalink)  
Antiguo 27/11/2008, 14:41
 
Fecha de Ingreso: noviembre-2008
Mensajes: 4
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: Sobre MySQLi y los prepared statements

Disculpa GatorV, con respeto te contradigo, ya solucione mi problema. Era un simple error en la sentencia del sql, pero me di cuenta que si funciona perfectamente los prepared statements con mysql y adodb y tengo los ejemplos para probarlo.
Realizare el aporte mañana cuando llegue al trabajo. Gracias de todos modos.
  #13 (permalink)  
Antiguo 27/11/2008, 17:52
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: Sobre MySQLi y los prepared statements

ADODB, emula los prepared statements, tu querias hacerlo con la extensión de MySQL, recuerda que es importante dar todos los datos al poner tus posts.

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




La zona horaria es GMT -6. Ahora son las 03:54.