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 发布的文章中找到此类文件的示例(我顺便写了一个链接)。
请注意,堆栈跟踪往往会变得非常大,并且会严重破坏您的日志。因此,请考虑将扩展输出设为可选。
TA贡献1827条经验 获得超4个赞
如果您试图了解先前执行的查询,一种可能的解决方案是将您的 SQL 存储在单个变量中并为每个语句更改它。然后,如果查询发生错误,您只需回显变量的内容即可。除非有特定原因,否则您需要有多个变量来保存您的查询。
- 2 回答
- 0 关注
- 128 浏览
添加回答
举报