我有一个像这样执行的复杂查询:
if ($stmt = $dbi->prepare($pt_query)) {
$stmt->bind_param('ssssssssi', $snome,$scognome,$ssocieta,$svia,$slocalita,$sprovincia,$scap,$stelefono,$sfax,$uid);
$stmt->execute();
echo $dbi->error;
$stmt->close();
} else {
printf("Error -> %s\n", $dbi->error);
}
这件事没有任何错误就失败了,它只是不更新数据库。由于在此事之前有大量数据需要处理,我想知道是否有任何方法可以显示mysqli正在执行的实际查询,以便了解问题所在。
谢谢。
答案 0 :(得分:9)
如果您的陈述失败,您应该检查$stmt->error
(而不是$dbi->error
)。至于获取查询的实际文本:这是不可能的。使用预准备语句时,库正在使用特殊协议,该协议不会为每个->execute()
调用生成实际查询字符串。
答案 1 :(得分:5)
您可以打开MySQL数据库本身的日志记录,即。将log = logfile 行添加到my.ini。
如果需要,请参阅MySQL documentation以获取更多信息。
答案 2 :(得分:0)
基于PHP mysql website,没有实际的方法。但您可以尝试this function,因为它会在您的查询中出现错误。
答案 3 :(得分:0)
我发现这是一个可能有用的工具MySQLi Prepare Statement checker