Wie deaktiviere ich PHP, das SQL-Fehler meldet?
P粉550257856
2023-09-05 17:14:24
<p>Ich habe meine eigene PHP-Datenklasse, die MySQL-Fehler mithilfe von <code>mysqli_error($this->conn)</code></p> in einer TXT-Datei protokolliert.
<p>Alles hat gut funktioniert, bis ich die PHP-Fehlerbehandlung auf E_ALL gesetzt habe. Jetzt fängt PHP den Fehler ab und er hat keine Chance, von meinem MySQL-Fehlerbehandler behandelt zu werden. </p>
<p>Dies wäre kein Problem, wenn PHP nicht den vollständigen SQL-String des Fehlers protokolliert hätte. Es werden nur etwa die ersten 20 Zeichen protokolliert, gefolgt von „…“, was für das Debuggen nicht sehr nützlich ist. </p>
<p>Meine Frage lautet also: Ist es möglich, PHP anzuweisen, MySQL-Fehler zu ignorieren und gleichzeitig PHP-Fehler zu behandeln? </p>
<p>Ich habe mir verschiedene Ebenen von error_reporting() angesehen, aber nichts scheint speziell MySQL-Fehler zu hinterlassen. </p>
您可以通过禁用 mysqli 错误报告来做到这一点,但任何常规项目都不应该这样做。事实上,看来您正在以错误的方式解决这个问题!您不应该想要禁用错误报告,您应该修复错误!
正如您所提到的,如果错误来自错误构建的动态 SQL 语句,那么您的代码不应包含任何逻辑来处理这种可能的情况,因为您不想让错误成为设计的一部分。就像任何其他错误一样,这是 PHP 代码中的一个错误。它本身表现为 MySQL 错误这一事实是无关紧要的。您必须修复构建无效 SQL 语句的代码! 沉默错误无助于修复错误!
假设您的 PHP 代码从常量 SQL 部分构建 SQL(如果它使用变量,那么您的代码中就会出现更大的问题),那么您的任务是确定哪个代码路径导致 SQL 关键字的不正确组合。您可以从 SQL 错误中部分推断出这一点。异常消息将告诉您语法错误是什么。如果 MySQL 错误与损坏的语法无关,则过程仍然类似:找到导致错误的原因并修复它。
不要在 SQL 代码周围编写特殊的错误处理逻辑。这很混乱,而且绝对没有必要。