Debuggen von benutzerdefinierten Datenbankabfragen

8

Gibt es eine bequeme Möglichkeit, ein bestimmtes Datenbankobjekt zum Drucken seiner Abfrage aufzufordern?

Hin und wieder schreibe ich ein DBTNG db_op () in ein Modul, und viel zu oft verstehe ich die Abfragen nicht ganz richtig.

Ich weiß, dass devel das Abfrageprotokoll ausgeben kann, aber das sind alles Abfragen, die in solchen Situationen häufig ein Problem darstellen.

Ich will das tun

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

Antworten:

13

Es gibt eine dpq()Funktion im Entwicklungsmodul, die diesen Bedarf zu erfüllen scheint.

Drucken Sie eine SQL-Zeichenfolge aus einem DBTNG-Abfrageobjekt. Enthält zitierte Argumente.

lslinnet
quelle
5
Ich würde diese +100 geben, wenn ich könnte, habe diese Funktion noch nie gesehen
Clive
3
Sie hätten haben können, wenn Sie ein Kopfgeld angeboten hätten. ;)
Kiamlaluno
2

Ich weiß, dass dies eine alte Frage ist, aber hoffentlich kann diese Antwort für andere nützlich sein: Im Grunde hat der Drupal-Kern eine eigene DatabaseLog-Klasse . Sie können es in Fällen verwenden, in denen das Devel-Modul nicht verfügbar ist (z. B. beim Debuggen langsamer Abfragen in der Produktion?):

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