Depurando Consultas de Banco de Dados Customizadas

8

Existe uma maneira conveniente de solicitar que um objeto de banco de dados específico imprima sua consulta?

De vez em quando, escrevo um DBTNG db_op () em um módulo e, de tempos em tempos, não entendi direito as consultas.

Eu sei que o devel pode gerar o log de consultas, mas são todas as consultas, o que, nesse tipo de situação, é um problema com mais frequência.

eu quero fazer

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

Respostas:

13

Há uma dpq()função no módulo devel que parece atender a essa necessidade.

Imprima uma seqüência de caracteres SQL a partir de um objeto de consulta DBTNG. Inclui argumentos citados.

lslinnet
fonte
5
Eu daria isso a +100, se pudesse, nunca vi essa função antes
Clive
3
Você poderia ter tido, se você ofereceu uma recompensa. ;)
kiamlaluno
2

Sei que essa é uma pergunta antiga, mas espero que essa resposta seja útil para outras pessoas: basicamente o núcleo do Drupal tem sua própria classe DatabaseLog . Você pode usá-lo nos casos em que não possui o módulo Devel disponível (como talvez a depuração de produção de consultas lentas?):

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