sentencias - prepared statement php
¿Es mejor usar una declaración Select preparada cuando solo está haciendo una selección? (6)
Actualmente estoy escribiendo una clase CRUD en PHP usando PDO.
Me gusta la seguridad que ofrecen las declaraciones preparadas, pero he oído que también evitan que bases de datos como mysql utilicen la queryCache.
¿Es mejor usar una declaración Select preparada cuando solo está haciendo una selección a la vez? ¿o solo $ pdo-> quote () bastará con el punto de vista de seguridad (o tiene otras ventajas como el almacenamiento en caché?).
Toda mi actualización, eliminación e inserciones se hacen usando declaraciones ya preparadas. Solo tengo curiosidad sobre los seleccionados.
¿Solo está haciendo una selección "una vez" en la vida útil de la aplicación, o "una vez" por llamada a la función?
Porque si esto último, aún así debería beneficiarse del almacenamiento en caché en la declaración preparada.
Esto es lo que entiendo, como lo confirmó la discusión de: aquí
Una consulta normal se toma como una sola cadena, se analiza, se ejecuta y se devuelve. Fin de la historia. Una declaración preparada se toma como una cadena de plantilla, se analiza y se almacena en caché. Luego tiene variables pasadas, casi como una llamada a función.
Caché de la consulta una vez tiende a costar un poco más que simplemente ejecutarlo directamente. Los ahorros vienen en llamadas posteriores, cuando omite el paso de compilación. Usted guarda por consulta repetida el monto de la compilación.
Entonces, en resumen, en MySQL, si está ejecutando una consulta una vez, prepararla solo agrega una innecesaria cantidad adicional de procesamiento.
Las declaraciones preparadas generalmente se consideran mejores prácticas.
Sugeriría leer el artículo de MySql sobre las declaraciones preparadas y sus aspectos prácticos y ventajas sobre las consultas fibrosas interpoladas convencionales de vainilla normal.
MySQLPerformanceBlog.com hizo algunos puntos de referencia en un artículo sobre " Declaraciones preparadas ". Peter Zaitsev escribió:
He hecho un punto de referencia simple (usando SysBench) para ver el rendimiento de la consulta simple (selección de punto de una sola fila) usando una declaración estándar, una declaración preparada y la he servido desde el caché de consultas. Las declaraciones preparadas dan 2290 consultas / seg, lo que es significativamente mejor que 2000 con declaraciones estándar, pero todavía está muy por debajo de las 4470 consultas / seg cuando los resultados se publican desde el caché de consultas.
Esto parece decir que la "sobrecarga" de usar declaraciones preparadas es que son 14.5% más rápidas que usar una ejecución de consulta directa, al menos en esta simple prueba. La diferencia relativa probablemente disminuya con una consulta más compleja o un conjunto de resultados más grande.
Parece contra-intuitivo que las consultas preparadas serían más rápidas, dado el doble viaje de ida y vuelta al servidor y otros factores. El punto de referencia de Peter carece de detalles. De todos modos, debe ejecutar sus propias pruebas, ya que el tipo de consulta que ejecuta y su entorno y hardware son definitivamente factores importantes.
En cuanto a Query Cache, era cierto en el pasado que las declaraciones preparadas eran incompatibles con los resultados de la búsqueda en caché, pero esto se modificó. Consulte " Cómo funciona la caché de consultas " en la documentación de MySQL:
Antes de MySQL 5.1.17, las declaraciones preparadas no usan el caché de consultas. A partir de 5.1.17, las declaraciones preparadas usan la caché de consultas bajo ciertas condiciones, que difieren según el método de preparación: ...
La documentación continúa describiendo estas condiciones. Ve a leerlo
Recomiendo usar declaraciones preparadas para consultas SELECT
. Citar variables a medida que las intercala en sentencias de SQL puede ser eficaz si lo hace de forma coherente. Pero incluso las comillas pueden tener algunas vulnerabilidades de seguridad sutiles, por ejemplo, con conjuntos de caracteres de múltiples bytes (consulte el error # 8378 de MySQL). En estos casos, es más fácil usar consultas preparadas de forma segura.
Sí, use declaraciones preparadas. Dudo seriamente que se encuentre con problemas de rendimiento con declaraciones preparadas que se ejecutan mucho más lento que una simple consulta literal. Sin embargo, en mysql, parece ser correcto. Sin embargo, optaría por las declaraciones preparadas.
Aquí hay una referencia: http://www.mysqlperformanceblog.com/2006/08/02/mysql-prepared-statements/
Aunque, si le preocupa el almacenamiento en caché, es posible que desee ver cosas como memcached .
Solo un recordatorio de que MySQL> 5.1.17 usa el caché de consultas para las declaraciones preparadas.
Desde el código POV, creo que las declaraciones preparadas son, en su mayor parte, el camino a seguir en términos de legibilidad, mantenibilidad, etc.
La única razón para no usarlas sería las consultas costosas que reciben llamadas con cierta frecuencia. (consultas que tardan mucho tiempo en ejecutarse y tienen un beneficio real al estar en el caché de consultas).