2011-03-04 17 views
6

¿Cuáles son las ventajas de usar declaraciones preparadas con MySQLi?¿por qué MySQLi preparó declaraciones?

Si el único propósito es asegurar la consulta, ¿no es mejor limpiar la consulta usando algo como mysqli_real_escape_string en lugar de escribir tantas líneas de código para cada consulta (como prepare, bind_param, execute, close etc.) ?

+0

tiempo de ejecución y caché de consultas. – zzzzBov

Respuesta

12

Preparar declaraciones no es solo para la seguridad del código. Ayuda al servidor SQL a analizar su declaración y generar un plan de ejecución para su consulta.

Si ejecuta un SELECT 1000 veces, el servidor SQL tendrá que analizar, preparar y generar un plan sobre cómo obtener sus datos 1000 veces.

Si prepara un enunciado y luego ejecuta la declaración preparada 1,000 veces cada uno con diferentes valores encuadernados, la declaración se analiza solo una vez y se usa el mismo plan de consulta cada vez.

Esto ayuda no solo cuando ejecuta 1000 consultas dentro del script, sino también si solo tiene 1 sentencia y ejecuta el script 1,000 veces. El servidor puede recordar el lado del servidor del plan. La próxima vez que se ejecute el script, usará el mismo plan nuevamente.

Claro que puede parecer trivial para una o dos consultas, pero cuando empiece a ejecutar grandes cantidades de consultas o la misma consulta repetidamente, ahorrará mucho tiempo de procesamiento.

9

Hay varias ventajas:

  • de seguridad - no es necesario para escapar nada, sólo tiene que obligar a los parámetros.
  • Corrección - Si escribe WHERE $x = 4 obtendrá un error de sintaxis si $x es nulo, pero WHERE ? = 4 funcionará.
  • Las consultas preparadas para el rendimiento se pueden reutilizar con diferentes parámetros, guardando la reconstrucción de la cadena y repasando también en el servidor.
  • Mantenibilidad: el código es mucho más fácil de leer. Cuando concatena cadenas para crear el SQL, es fácil terminar con muchas partes pequeñas de código SQL y PHP entremezclados. El uso de declaraciones preparadas lo alienta a separar el SQL de la determinación de los valores de las variables.
Cuestiones relacionadas