En mi mente, el siguiente script debería funcionar:¿Por qué no puedes pasar las funciones de MYSQL a las declaraciones de PDO preparadas?
$stmt = $db->prepare("UPDATE table SET status = ?, date_modified = ?");
$stmt->execute(array(1, 'NOW()'));
pero al pasar NOW()
a la declaración preparada, no pasa nada. Reemplazar NOW()
con una fecha real (es decir, 2010-11-23) funciona bien.
No puedo encontrar la explicación en línea. ¿Algunas ideas?
EDITAR
Sólo para aclarar y eliminar cualquier confusión en la pregunta, quiero pasar realmente una variable en la declaración preparada Sin embargo, la variable se establece en una de las cinco funciones posibles de fecha/hora para mysql.
p. Ej.
$ var = 'NOW()';
$ var = 'LAST_DAY (DATE_ADD (CURDATE(), INTERVAL 1 MES))';
$ var = 'LAST_DAY (CURDATE())';
... y así sucesivamente ...
declaración preparada se convierte en:
$stmt->execute(array(1, $var));
Sé que esto devolverá los mismos resultados nulos, pero me preocupa si simplemente cambiar el SQL para:
estado UPDATE tabla SET =, date_modified = $ var
? 10
¿Me estoy abriendo a la inyección?
Las declaraciones preparadas se usan para ** separación ** de comandos y datos. Y no puede deshacer esa separación y obtener datos interpretados como sentencias de SQL. – mario