如何获取在 PHP 中发生异常之前执行的最后一个 mysqli 查询?

这是一些示例代码:


try

{

   $db->query($sql_q1);

   $db->query($sql_q2);

   $db->query($sql_q3);

}

catch (Exception $e) 

{

   echo $e->getMessage();

}

我如何才能看到哪个查询导致了错误,catch以便我可以看到它以及错误消息?行号对我不起作用,因为我的查询通常是动态构建的。


杨__羊羊
浏览 131回答 2
2回答

沧海一幻觉

如果你不抓住它,就会有比你抓住更多的信息。只需尝试从您的代码中删除这些try..catch内容,您就会看到查询的前 15 个字符。但是如果你需要整个查询,有一种方法,虽然它不会马上给你,就像一个包含专门“最后执行的查询”的指定变量,但从技术上讲你可以有一种叫做stack trace 的东西,用于确切的目的。它可以向您显示代码中导致错误的所有调用,包括所有函数参数。将您的代码更改为此try{   $db->query($sql_q1);   $db->query($sql_q2);   $db->query($sql_q3);}catch (Exception $e) {   var_dump($e->getTrace());   // or to get the full error info, just   var_dump($e);}并且您将看到您的查询完全光荣,但如果这是您的目标,自动获取实际查询将是一件非常痛苦的事情。但是如果你只想记录/目视检查错误信息,它就可以了。显然你不应该在任何现实生活中的代码中将 var_dump() 放在 try_catch() 中。相反,必须将一些处理代码放入您的错误处理程序中。特别是如果您的目的是调试。因此,您的现实生活代码应该是这样的// somewhere in the bootstrapinclude 'error_handler.php';// anywhere in your code$db->query($sql_q1);$db->query($sql_q2);$db->query($sql_q3);在 error_handler.php 中,您可以添加代码来打印完整的堆栈跟踪。您可以在 Usman Munir 发布的文章中找到此类文件的示例(我顺便写了一个链接)。请注意,堆栈跟踪往往会变得非常大,并且会严重破坏您的日志。因此,请考虑将扩展输出设为可选。

GCT1015

如果您试图了解先前执行的查询,一种可能的解决方案是将您的 SQL 存储在单个变量中并为每个语句更改它。然后,如果查询发生错误,您只需回显变量的内容即可。除非有特定原因,否则您需要有多个变量来保存您的查询。
打开App,查看更多内容
随时随地看视频慕课网APP