为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
杨__羊羊 2023-04-28 15:12:37
这是一些示例代码:try{   $db->query($sql_q1);   $db->query($sql_q2);   $db->query($sql_q3);}catch (Exception $e) {   echo $e->getMessage();}我如何才能看到哪个查询导致了错误,catch以便我可以看到它以及错误消息?行号对我不起作用,因为我的查询通常是动态构建的。
查看完整描述

2 回答

?
沧海一幻觉

TA贡献1824条经验 获得超5个赞

如果你不抓住它,就会有比你抓住更多的信息。只需尝试从您的代码中删除这些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 bootstrap

include 'error_handler.php';


// anywhere in your code

$db->query($sql_q1);

$db->query($sql_q2);

$db->query($sql_q3);

在 error_handler.php 中,您可以添加代码来打印完整的堆栈跟踪。您可以在 Usman Munir 发布的文章中找到此类文件的示例(我顺便写了一个链接)。


请注意,堆栈跟踪往往会变得非常大,并且会严重破坏您的日志。因此,请考虑将扩展输出设为可选。


查看完整回答
反对 回复 2023-04-28
?
GCT1015

TA贡献1827条经验 获得超4个赞

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



查看完整回答
反对 回复 2023-04-28
  • 2 回答
  • 0 关注
  • 91 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信