Hace poco actualicé este proyecto para incluir la integración de compositores, pruebas de unidades y manejar mejor la aceptación de argumentos por referencia (esto requiere actualizar a php 5.6).
He creado un conjunto de clases que amplían el valor por defecto mysqli
y mysqli_stmt
clases que le permiten ver una versión de la cadena de consulta potencial, que debe proporcionar lo que estás buscando:
https://github.com/noahheck/E_mysqli
Este es un reemplazo (cerca) de acogida para que la normalidad mysqli
objeto que devuelve un objeto personalizado mysqli_stmt
cuando prepare()
la cadena de consulta. Después de la unión de sus parámetros, E_mysqli
le permitirá ver la cadena de consulta resultante como una nueva propiedad de la stmt
objeto:
$mysqli = new E_mysqli($dbHost, $dbUser, $dbPass, $dbName);
$query = "INSERT INTO registration SET name = ?, email = ?";
$stmt = $mysqli->prepare($query);
$stmt->bind_param("ss", $_POST['name'], $_POST['email']);
$stmt->execute();
echo $stmt->fullQuery;
resultaría en:
INSERT INTO registration SET name = 'John Doe', email = '[email protected]'
Hay algunas advertencias con el uso de esta extensión (explicado en el archivo README en el proyecto github), pero para la resolución de problemas de áreas problemáticas de su aplicación, o la transición a un estilo orientado a objetos desde procedimientos, esto debería proporcionar un nivel de ayuda para la mayoría de los usuarios.
Como he descrito en el proyecto github, no tengo ninguna experiencia práctica con la extensión mysqli
, y este proyecto se creó a petición de los usuarios de su proyecto hermano, por lo que cualquier comentario que pueda proporcionarse desde los desarrolladores que usen esto en la producción serán muy apreciados.
Descargo de responsabilidad - Como dije, hice esta extensión.
bien, eso es un poco molesto = \ Usted pensaría que hay una manera de ir a la declaración ejecutada – Stomped
Si necesita esto en el lado de PHP, principalmente por razones de depuración, supongo que podría "reconstruir" el SQL consulta que es equivalente a la ejecución de la instrucción: deberá reemplazar los marcadores de posición por los valores de las variables * (por supuesto, se le escapará la información) * ;;; si necesita esto a menudo, debería poder escribir una función que lo haga por usted; de lo contrario, un par de 'var_dump' ya debería ayudarte a ver qué datos se envían al servidor MySQL. –
@stomped El punto es que no hay instrucción ejecutada. Ese paso se omite por completo. – troelskn