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