Débogage des requêtes de base de données personnalisées

8

Existe-t-il un moyen pratique de demander à un objet de base de données particulier d'imprimer sa requête?

De temps en temps, j'écris un DBTNG db_op () dans un module, et bien trop souvent, je ne comprends pas très bien les requêtes.

Je sais que devel peut générer le journal des requêtes, mais ce sont toutes des requêtes, ce qui, dans ce type de situation, est le plus souvent un problème.

je veux faire

$result = db_select('node', 'n')->fields('n')->execute();
dpm($result->queryWithParameters);
dpm($result->finalQuery);
Létharion
la source

Réponses:

13

Il y a une dpq()fonction dans le module de développement qui semble répondre à ce besoin.

Imprimer une chaîne SQL à partir d'un objet de requête DBTNG. Comprend les arguments cités.

lslinnet
la source
5
Je donnerais ce +100 si je pouvais, jamais vu cette fonction auparavant
Clive
3
Vous auriez pu en avoir si vous aviez offert une prime. ;)
kiamlaluno
2

Je sais que c'est une vieille question mais j'espère que cette réponse pourrait être utile à d'autres personnes: fondamentalement, le noyau Drupal a sa propre classe DatabaseLog . Vous pouvez l'utiliser dans les cas où vous n'avez pas de module Devel disponible (comme peut-être le débogage de production de requêtes lentes?):

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