バージョン: v2.3.0
debug
生成された SQL を実行せずに確認できるデバッグモードを有効にします。
debug()
戻り値
[Medoo] デバッグモードが有効な Medoo インスタンス。
Medoo は生成された SQL を実行せずに出力します。トラブルシューティングが終わったらデバッグモードを無効にしてください。
生成された SQL
debug() を使用して、現在のクエリによって生成された SQL を検査します。$database->debug()->select("bccount", [
"user_name",
"email"
], [
"user_id[<]" => 20
]);
// 出力:
// SELECT "user_name","email" FROM "bccount" WHERE "user_id" < 20
注意が必要なケース
場合によっては、1 つのリクエスト中に複数の SQL クエリが実行されます。あるクエリで
debug() を呼び出しても、後続のコードはそのまま実行されるため、想定外の動作につながることがあります。// ここでは何も出力されません。
$database->insert("account", [
"user_name" => "foo",
"email" => "foo@bar.com"
]);
// 生成されたクエリを出力します。
$post_id = $database->debug()->get("post", "post_id", ["user_name" => "foo"]);
// 注意: このクエリは実際に実行されます。上で debug() を呼び出したため、$post_id は false になります。
$database->update("account", [
"level[+]" => 5,
"post" => $post_id
], [
"user_name" => "foo"
]);
デバッグログ
すべてのクエリに
debug() を付けずに全体を調べたい場合は、beginDebug() を呼び出してログを開始します。続いて debugLog() を呼び出すと記録を停止し、収集された SQL 文を配列で取得できます。// デバッグログの記録を開始します。
$database->beginDebug();
// これらのクエリは実行されず、デバッグログに記録されます。
$database->select("account", ["user_name", "email"], ["user_id[<]" => 20]);
$database->update("account", ["level[+]" => 1], ["user_id[>]" => 100]);
// debugLog() を呼び出して記録を停止し、記録された SQL 文をすべて返します。
var_dump($database->debugLog());
// 出力:
array(2) {
[0]=> string(10) "SELECT ... FROM"
[1]=> string(10) "UPDATE ... SET ... WHERE ..."
}