如何禁用 PHP 报告 SQL 错误?
P粉550257856
2023-09-05 17:14:24
<p>我有自己的 PHP 数据类,它使用 <code>mysqli_error($this->conn) 将 MySQL 错误记录到 txt 文件</code></p>
<p>一切都工作正常,直到我将 PHP 错误处理设置为 E_ALL。现在 PHP 拦截了错误,并且它没有机会被我的 MySQL 错误处理程序处理。</p>
<p>这不会是一个问题,除非 PHP 不记录出错的完整 SQL 字符串。它仅记录前 20 个字符左右,后跟“...”,这对于调试来说不是很有用。</p>
<p>所以我的问题是:是否可以告诉 PHP 忽略 MySQL 错误,同时仍然处理 PHP 错误?</p>
<p>我已经查看了 error_reporting() 的各个级别,但似乎没有任何内容专门留下 MySQL 错误。</p>
您可以通过禁用 mysqli 错误报告来做到这一点,但任何常规项目都不应该这样做。事实上,看来您正在以错误的方式解决这个问题!您不应该想要禁用错误报告,您应该修复错误!
正如您所提到的,如果错误来自错误构建的动态 SQL 语句,那么您的代码不应包含任何逻辑来处理这种可能的情况,因为您不想让错误成为设计的一部分。就像任何其他错误一样,这是 PHP 代码中的一个错误。它本身表现为 MySQL 错误这一事实是无关紧要的。您必须修复构建无效 SQL 语句的代码! 沉默错误无助于修复错误!
假设您的 PHP 代码从常量 SQL 部分构建 SQL(如果它使用变量,那么您的代码中就会出现更大的问题),那么您的任务是确定哪个代码路径导致 SQL 关键字的不正确组合。您可以从 SQL 错误中部分推断出这一点。异常消息将告诉您语法错误是什么。如果 MySQL 错误与损坏的语法无关,则过程仍然类似:找到导致错误的原因并修复它。
不要在 SQL 代码周围编写特殊的错误处理逻辑。这很混乱,而且绝对没有必要。