有没有办法打印mysqli-> execute()所做的实际查询?

时间:2010-04-22 14:31:28

标签: php mysqli

我有一个像这样执行的复杂查询:

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正在执行的实际查询,以便了解问题所在。

谢谢。

4 个答案:

答案 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