繁體中文
版本: 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 ..."
}