2011-11-28 10 views
7

He estado reutilizar la misma variable $stmt en mi script PHP para escribir las declaraciones preparadas:¿Cómo sé si se está almacenando en caché una declaración preparada?

$stmt = $dbh->prepare("SELECT column_A FROM Table1 WHERE id=?"); 
$stmt->bindValue(1, $id, PDO::PARAM_INT); 
$stmt->execute(); 
.... 

$stmt = $dbh->prepare("UPDATE Table2 SET column_B=? WHERE column_A=?"); 
$stmt->bindValue(1, $name); 
$stmt->bindValue(2, $column_A); 
$stmt->execute(); 

Mi pregunta es, ¿cómo sé si los dos estados se están escribiendo para almacenar en caché y que la segunda declaración no hizo sobrescribir la primera declaración aunque ambas declaraciones comparten el mismo nombre de variable?

+0

+1 por enseñarme algo nuevo –

Respuesta

2

que se han preparado por el motor de base de datos y no PHP, ver:

Así reutilizar el mismo nombre de variable en PHP no invalidará el MySQL preparar "caché".

+1

¿Esto es aplicable solo cuando 'setAttribute (PDO :: ATTR_EMULATE_PREPARES, false)' o es aplicable para casos verdaderos y falsos? –

+0

Dice en el enlace que "si ya existe una declaración preparada con el nombre dado, se desasigna implícitamente antes de que se prepare la nueva declaración". ¿Cómo sé si 'stmt_name' es asignado por MySQL y no tomado del nombre de la variable PHP? –

+0

@BenHuh: Honestamente, no tengo ni idea. Supongo que 'stmt_name' es una especie de hash calculado por PHP a partir de la consulta SQL. Eché un vistazo rápido a los documentos de MySQL y al código fuente de PDO/mysql y no pude encontrar nada que apunte en ninguna dirección, pero creo que los registros de MySQL pueden proporcionar algún tipo de información útil. –

0

No es así. Pero anular la variable no cambiará mucho: asigna un nuevo valor a la variable y no edita nada.

Cuestiones relacionadas