Drupal 7 で db_select() が発行するクエリ文を確認する方法

Drupal 7

今回は Drupal 7 で db_select() などデータベース関連の関数が発行するクエリを確認する方法について。

結論からいうと、 db_select() の戻り値である SelectQuery クラスのインスタンスのメソッドを利用すれば OK です。 同様のことは db_update() db_delete() など他のデータベース関連関数についても言えます。

具体的には、 getArguments() でパラメータを、 __toString() でクエリ文を確認することができます。

$query = db_select('users', 'u')
  ->fields('u', array('uid', 'name'))
  ->condition('status', 1, '=');

dpm($query->getArguments());  //  パラメータを取得
// =>
// [ ":db_condition_placeholder_0" => 1 ]

dpm($query->__toString());  //  プレースホルダのついたクエリ文を取得
// =>
// SELECT u.uid AS uid, u.name AS name
// FROM
// {users} u
// WHERE  (status = :db_condition_placeholder_0)

getArguments()__toString() はクエリオブジェクトを自動的にコンパイルしてくれるので細かいことは気にしなくてもよいのですが、一般にパラメータなどを取得する際には事前にコンパイルの処理が必要です。 たとえば、 arguments() という getArguments() とよく似たメソッドもあるのですが、こちらには事前の自動コンパイル機能がありません。 ですので、コンパイルを行ってくれる他のメソッドを実行した後にのみ有効な戻り値を返してくれる形になっているためこちらを利用する際には注意が必要です。

$query = db_select('users', 'u')
  ->fields('u', array('uid', 'name'))
  ->condition('status', 1, '=');

$query->arguments();
// => null

$query->execute();

$query->arguments();
// =>
// [ ":db_condition_placeholder_0" => 1 ]

以上です。

デバッグのときに便利ですね。

参考


アバター
後藤隼人 ( ごとうはやと )

Python や PHP を使ってソフトウェア開発やウェブ制作をしています。詳しくはこちら