2012-08-05 12 views
5

Estoy haciendo el cambio de llamadas mysql_* al uso de llamadas PDO y no puedo encontrar la manera de depurar mi SQL actual cuando desarrollo código nuevo.Depuración de consultas preparadas por PDO con MySQL

Debajo de mysql_* llamadas Podría escribir algo de SQL en una función de PHP y podría echo el SQL real para ver con qué estaba trabajando el procesador.

No he podido encontrar una bestia en la biblioteca de PDO. debugDumpParams parece que debería, pero no escupe la declaración encuadernada.

ejemplos de problemas que se han encontrado con:

  1. En mi primer intento que era vinculante una cadena y fue incluido las comillas en la instrucción SQL, a pesar de la unión con una data_type de cuerda - fue sólo por Fluke Intenté eliminar las citas de la declaración; la depuración me hubiera permitido ver que había una cita repetida allí.

  2. He copiado algunos códigos de un proyecto a otro y accidentalmente olvidé corregir el nombre de la base de datos. Naturalmente, el SQL falló porque las tablas no existían en el otro DB. Pero el programa acaba de devolver el resultado falso correcto. En ninguna parte de los registros de PHP o los registros de MySQL ni en ningún otro lado, recibí una pista de que la tabla no existía donde yo la estaba buscando.

Entonces, ¿cómo están haciendo otras personas la depuración de las llamadas de SQL de PDO? ¿Qué me estoy perdiendo? :)

+0

Umm, por alguna razón el editor eliminó mi segundo ejemplo: 2. Copié un código de un proyecto a otro y accidentalmente olvidé corregir el nombre de la base de datos. Naturalmente, el sql falló porque las tablas no existían en el otro db. Pero el programa acaba de devolver el resultado falso correcto. En ninguna parte de los registros de php o de los registros de mysql o en ningún otro lugar, recibí una pista de que la tabla no existía donde yo la estaba buscando. –

+1

¡Bienvenido a Stackoverflow! –

+0

@LeadeGroot, Formateo arreglado. Puso su primer artículo en la misma línea que "Ejemplos de problemas ...", haciendo que el segundo elemento sea el primero en una lista ordenada numéricamente. Extraño. – Brad

Respuesta

4

Para el primer problema, verificar la consulta es realmente difícil. No hay mucho que pueda hacer al respecto excepto para registrar las consultas en su servidor de base de datos. La razón es que las consultas preparadas no están (siempre) simplemente concatenando datos en la consulta. El punto es que los datos se envían por separado de la consulta. Puede acceder a la cadena de consulta a través del $yourStatement->queryString. Solo mostrará la consulta con los parámetros.

Para su segundo problema, por defecto PDO no lanza una excepción cuando ocurre un error. Depende de usted verificarlos. Puedes cambiar esto sin embargo. http://php.net/manual/en/pdo.error-handling.php

$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

A continuación, puede detectar los problemas por un bloque try/catch alrededor de su ejecución de la consulta.

+0

Gracias, sí, establecer el manejo de errores de esta manera coloca los mensajes de error en los registros - ¡excelente! –

Cuestiones relacionadas