Estoy jugando con MySQLi por el momento, tratando de descubrir cómo funciona todo. En mis proyectos actuales siempre me gusta hacer eco de una cadena de consulta durante la codificación, solo para asegurarme de que todo está correcto y para depurar mi código rápidamente. Pero ... ¿cómo puedo hacer esto con una declaración MySQLi preparada?Cómo hacer eco de una declaración preparada MySQLi?
Ejemplo:
$id = 1;
$baz = 'something';
if ($stmt = $mysqli->prepare("SELECT foo FROM bar WHERE id=? AND baz=?")) {
$stmt->bind_param('is',$id,$baz);
// how to preview this prepared query before acutally executing it?
// $stmt->execute();
}
He estado yendo a través de esta lista (http://www.php.net/mysqli), pero sin ninguna suerte.
EDITAR
Bueno, si no es posible desde dentro MySQLi, tal vez me quedo con algo como esto:
function preparedQuery($sql,$params) {
for ($i=0; $i<count($params); $i++) {
$sql = preg_replace('/\?/',$params[$i],$sql,1);
}
return $sql;
}
$id = 1;
$baz = 'something';
$sql = "SELECT foo FROM bar WHERE id=? AND baz=?";
echo preparedQuery($sql,array($id,$baz));
// outputs: SELECT foo FROM bar WHERE id=1 AND baz=something
lejos de ser perfecto, obviamente, ya que sigue siendo bastante redundante — algo que quería evitar — y tampoco me da una idea de lo que se está haciendo con los datos de MySQLi. Pero supongo que de esta manera puedo ver rápidamente si todos los datos están presentes y en el lugar correcto, y me ahorrará un poco de tiempo en comparación con ajustar las variables manualmente en la consulta — que puede ser un problema con muchos vars. .
Guau, no parece que haya una manera. Triste ... Esperaba poder cambiar a mysqli, pero necesito registrar todas las declaraciones SQL que se han ejecutado para un historial. –
Probablemente pueda hacer que su servidor MySQL registre todas las consultas que reciba –
Sí, eso es útil, pero no quiero registrar SELECTS y no ayuda mucho con la depuración ya que podría haber muchas consultas por segundo. –