gpt4 book ai didi

php - PDO 调试 - 绑定(bind)后查看查询?

转载 作者:IT老高 更新时间:2023-10-29 00:17:47 26 4
gpt4 key购买 nike

Possible Duplicate:
Retrieve (or simulate) full query from PDO prepared statement

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

有没有办法询问服务器“上次查询是什么”,或者告诉 PDO“显示你发送的内容”?

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

使用 bindValue(":fieldValue", $value); 如果有区别的话。

编辑

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

最佳答案

这是关于 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);

关于php - PDO 调试 - 绑定(bind)后查看查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11122573/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com