Depuración de consultas de bases de datos personalizadas

8

¿Hay alguna manera conveniente de pedirle a un objeto de base de datos particular que imprima su consulta?

De vez en cuando, escribo un DBTNG db_op () en un módulo, y con demasiada frecuencia, no entiendo bien las consultas.

Sé que devel puede generar el registro de consultas, pero eso es todo consultas, que, en este tipo de situación, es un problema más a menudo que no.

quiero hacer

$result = db_select('node', 'n')->fields('n')->execute();
dpm($result->queryWithParameters);
dpm($result->finalQuery);
Letharion
fuente

Respuestas:

13

Hay una dpq()función en el módulo de desarrollo que parece satisfacer esta necesidad.

Imprima una cadena SQL desde un objeto de consulta DBTNG. Incluye argumentos citados.

lslinnet
fuente
55
Daría este +100 si pudiera, nunca antes había visto esa función
Clive
3
Podrías haberlo hecho si hubieras ofrecido una recompensa. ;)
kiamlaluno
2

Sé que esta es una pregunta antigua, pero espero que esta respuesta pueda ser útil para otras personas: básicamente Drupal core tiene su propia clase DatabaseLog . Podría usarlo en casos en los que no tenga disponible el módulo Devel (¿tal vez la depuración de producción de consultas lentas?):

Database::startLog('my_custom_key');
// do some SQL operations here...
// print the queries
print_r(Database::getLog('my_custom_key'));
andreiashu
fuente