像这样的代码之后:
$stmt = $mysqli->prepare("SELECT District FROM City WHERE Name=?")) {
$stmt->bind_param("s", $city);
$stmt->execute();
$stmt->bind_result($district);
$stmt->fetch();
printf("%s is in district %s\n", $city, $district);
如何查看实际执行的 SQL 语句?
(它应该看起来像“SELECT District FROM City WHERE Name='Simi Valley';”)
我已经意识到,在这种简单的情况下,简单地重建查询将非常容易……但是我如何才能以一种通用的方式访问它,这种方式将适用于非常复杂的准备好的语句,以及我不这样做的情况必须已经了解查询的预期结构等。在绑定(bind)后,是否可以在将返回 SQL 查询的实际文本的语句对象上调用某些函数或方法?
最佳答案
当您使用准备好的语句时,没有“SQL 查询”:
- 首先,您有一个包含占位符的语句
- 这条语句被发送到数据库服务器,并在那里准备
- 这意味着 SQL 语句被分析、解析,并且在内存中准备了一些表示它的数据结构
- 然后,你有绑定(bind)变量
- 发送到服务器
- 并执行准备好的语句——处理这些数据
但是实际上并没有重新构建真正的 SQL 查询——无论是在 PHP 端还是在数据库端。
因此,无法获取准备好的语句的 SQL -- 因为没有这样的 SQL。
如果您需要查看一些信息,如您所说,出于调试目的,您通常有两种选择:
- 手动创建与准备好的语句对应的 SQL 查询。
- 或者输出语句的代码,带占位符;和数据列表
- 这意味着您将没有可以执行的真正的 SQL 查询
- 但这通常足以帮助调试
关于php - 我如何查看调用 mysqli->prepare 产生的查询的最终文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2648515/