提问人:Michael Legg 提问时间:5/8/2023 最后编辑:DharmanMichael Legg 更新时间:7/6/2023 访问量:79
如何禁用PHP报告SQL错误?
How to disable reporting of SQL errors by PHP?
问:
我有自己的PHP数据类,它使用将MySQL错误记录到txt文件中mysqli_error($this->conn)
一切正常,直到我将PHP错误处理设置为E_ALL。现在PHP拦截了错误,并且我的MySQL错误处理程序没有机会处理它。
这不会有问题,除非 PHP 不会记录出错的完整 SQL 字符串。它只记录前 20 个字符左右,然后是“...”这对调试不是很有用。
所以我的问题是:是否可以告诉PHP在处理PHP错误的同时不理会MySQL错误?
我已经查看了error_reporting()的各个级别,但似乎没有任何特别遗漏MySQL错误的内容。
答:
您可以通过禁用 mysqli 错误报告来做到这一点,但任何常规项目都不应该这样做。事实上,你似乎以错误的方式处理这个问题!您不应该想禁用错误报告,您应该修复错误!
如前所述,如果错误来自错误构建的动态 SQL 语句,则您的代码不应包含任何逻辑来处理这种可能的情况,因为您不想让 bug 成为设计的一部分。这是PHP代码中的一个错误,就像任何其他错误一样。它表现为MySQL错误这一事实是无关紧要的。您必须修复生成无效 SQL 语句的代码!静音错误无助于修复它们!
假设你的PHP代码从常量SQL部分构建SQL(如果它使用变量,那么你的代码中就会有更大的问题),那么你的任务是确定哪个代码路径导致SQL关键字的错误组合。您可以从SQL错误中部分地了解它。异常消息将告诉您语法错误是什么。如果MySQL错误与语法损坏无关,则过程仍然相似:找到导致错误的原因并修复它。
不要围绕 SQL 代码编写特殊的错误处理逻辑。这是混乱的,绝对没有必要。
评论
log_errors
答案是在 SQL 字符串的执行周围使用 Try Catch 块,并在块的 Catch 部分记录错误。这样,我就可以记录我需要的所有详细信息,包括完整的 SQL 字符串。
评论
SELECT * FROM table WHERE id=?