2009-12-10 23 views
5

He estado buscando una respuesta a esto pero no lo he encontrado en ninguna parte. Son llamadas a PDO :: prepare en caché(), o debería almacenar en caché el resultado a mí mismo, es decir, si hago lo siguientePHP PDO Caching

function foo() { 
    $handle = PDO::prepare(...); 
    /* do stuff with the handle */ 
} 

será la declaración() ser almacenado en caché por DOP preparar de manera que se recupera rápidamente la segunda, tercero, etc. veces? ¿O es mejor hacerlo yo mismo, p.

function foo() { 
    static $handle = null; 
    if (!$handle) { 
    $handle = PDO::prepare(...); 
    } 
    /* do stuff with the handle */ 
} 

Respuesta

4

No es el MySQL query cache. Pero, en general, definitivamente debe conservar el identificador de la declaración preparada y volver a utilizarla.

4

Dos llamadas subsiguientes a PDO::prepare() (incluso con la misma consulta SQL) deben devolver dos PDOStatement (o controladores) diferentes para evitar colisiones, especialmente entre los enlaces anteriores y actuales que puede aplicar a la misma. El costo de crear una PDOStatement con prepare() es bajo de todos modos. Lo que puede querer almacenar en la memoria caché son los resultados devueltos por la misma consulta SQL, en bruto o creados por prepare() y esta es una característica de su DBMS (por ejemplo, MySQL), no de PHP.

1

Depende del controlador de su base de datos. Con MySQL, PDO creará una declaración nativa preparada por defecto. Puede desactivarlo, si desea usar un caché de consulta real.

Si absolutamente debe ejecutar la misma consulta varias veces, entonces sí, querrá mantener ese control. Si está utilizando declaraciones preparadas emuladas, entonces no hace ninguna diferencia.