版本: 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
風險案例
在某些情況下,單一請求會執行多個 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 ..."
}