Konvertieren Sie in MySQLi Abfragefehler in Ausnahmen
P粉060528326
P粉060528326 2023-08-24 11:53:00
0
2
429
<p>Ich versuche, MySQLi-Abfragefehler in Ausnahmen umzuwandeln, aber das ist nicht möglich – die mysqli_sql_Exception-Ausnahme wird nur ausgelöst, wenn die Verbindung zur Datenbank fehlschlägt. </p> <p>Ich habe <code>mysqli_report(MYSQLI_REPORT_STRICT)</code> mit einer prozeduralen MySQLi-Funktion verwendet, die in eine benutzerdefinierte Wrapper-Klasse eingebettet ist. </p> <p><strong>Vorheriger Code: </strong></p> <pre class="brush:php;toolbar:false;">public function mysqlQuery($SQL) { $this->Result = mysqli_query($this->DBlink, $SQL); if($this->Result === false) throw new MySQLiQueryException($SQL, mysqli_error($this->DBlink), mysqli_errno($this->DBlink)); return $this->Result; }</pre> <p><strong>Frage: </strong>Es wird keine Warnung oder Ausnahme ausgelöst, wenn eine Abfrage fehlschlägt. Ist das normal? Also muss ich prüfen, ob mysqli_query() false zurückgibt? </p>
P粉060528326
P粉060528326

Antworte allen(2)
P粉420958692

No.

您应该能够按照您的要求并指示mysqli驱动在SQL错误时抛出异常,但如果尚未启用MYSQLI_REPORT_ERROR,则需要启用它....

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT)

mysqli_query()现在应该在错误时抛出异常。您不需要检查失败的返回值(无论如何,都会抛出异常)。

public function mysqlQuery($SQL) {
    try {
        $this->Result = mysqli_query($this->DBlink, $SQL);
    } catch (mysqli_sql_exception $e) {
        throw new MySQLiQueryException($SQL, $e->getMessage(), $e->getCode());
    }
    return $this->Result;
}

(注意:我在重新抛出的异常中将$this->SQL更改为$SQL。)

P粉549412038

一段时间前,我成功解决了这个问题。正如在其他答案中指出的那样,

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

是告诉mysqli抛出异常的正确方法。

只需确保不要在每个查询中都包裹try-catch。这是一个非常常见的误解,一旦开始使用异常,就应该开始到处抛出try和catch。相反,try-catch应该谨慎使用。虽然99%的错误不应该在现场处理,而是由整个站点的错误处理程序处理。您可以从我在PHP错误报告文章中了解更多相关主题。

Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!