12

可能重复:
从 PDO 准备语句中检索(或模拟)完整查询

我不知道为什么我的查询返回 0 行。它实现了一些非常动态的搜索功能,以及许多 if/loop 语句等。因此要调试它,我想确切地看到正在发送的字符串到服务器。有没有办法通过 PHP 做到这一点?

有没有办法询问服务器“最后一个查询是什么”,或者告诉 PDO“告诉我你发送了什么”?

我看到一个响应str_replace用于手动输入值来代替:fieldValue,但这可能是语法问题(或者它可能正在经历不正确的循环等),这种方法没有帮助。

使用bindValue(":fieldValue", $value);if 会有所作为。

编辑

原来这是一个if ($var="true") { ...应该是简单的if ($var=="true") { ...。从这个意义上说,我猜 PHP 与 Java 不一样?无论哪种方式,问题仍然存在(因为我经常遇到这种情况)。我不得不使用一系列echo "You are Here";来找到这个错误,因为它在技术上是有效的,但不正确。如果我有最后的 SQL 语句,我可能会看到“哦,我的代码添加了where column = true,一定是通过了错误的 IF...”。

4

1 回答 1

0

这是关于 SQL 调试的最常见的神话。“我需要在准备好后查看查询,才能判断是否发生了错误”。事实是,你没有,我会告诉你为什么。

准备好查询后,可以将占位符视为有效的字符串/整数。你不在乎里面有什么。

此外,如果您正确设置 PDO,您将获得PDOException详细的错误详细信息以及错误发生位置的完整回溯,以及从 MySQL 获取错误字符串,这使得语法错误很容易找到.

要启用 PDO 异常并禁用模拟准备:

$pdo = new PDO("mysql:host=localhost;dbname=database_name", "user", "password");
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
于 2012-06-20T15:22:38.747 回答