Dans MySQLi, convertissez les erreurs de requête en exceptions
P粉060528326
2023-08-24 11:53:00
<p>J'essaie de convertir les erreurs de requête MySQLi en exceptions, mais ce n'est pas possible - l'exception mysqli_sql_exception n'est levée qu'en cas d'échec de la connexion à la base de données. </p>
<p>J'ai utilisé <code>mysqli_report(MYSQLI_REPORT_STRICT)</code> avec une fonction MySQLi procédurale intégrée dans une classe wrapper personnalisée. </p>
<p><strong>Code précédent : </strong></p>
<pre class="brush:php;toolbar:false;">fonction publique mysqlQuery($SQL) {
$this->Result = mysqli_query($this->DBlink, $SQL);
si($this->Résultat === faux)
lancer une nouvelle MySQLiQueryException($SQL, mysqli_error($this->DBlink), mysqli_errno($this->DBlink));
retourner $this->Résultat;
}</pré>
<p><strong>Question : </strong>Aucun avertissement ou exception n'est émis lorsqu'une requête échoue, est-ce normal ? Je dois donc vérifier si mysqli_query() renvoie false ? </p>
Non.
Vous devriez pouvoir suivre vos exigences et demander au pilote mysqli de lever des exceptions sur les erreurs SQL, mais vous devrez l'activer s'il n'est pas déjà activé
MYSQLI_REPORT_ERROR
....mysqli_query()
Une exception devrait maintenant être levée en cas d'erreur. Vous n'avez pas besoin de vérifier la valeur de retour en cas d'échec (l'exception sera levée de toute façon).(Remarque : je le ferai
$this->SQL
更改为$SQL
dans l'exception de renvoi.)Il y a quelque temps, j'ai résolu ce problème avec succès. Comme indiqué dans autres réponses,
est la bonne façon de dire à mysqli de lever une exception.
Assurez-vous simplement de ne pas inclure try-catch dans chaque requête. C'est une idée fausse très courante : une fois que vous commencez à utiliser des exceptions, vous devriez commencer à lancer des try and catch partout. En revanche, try-catch doit être utilisé avec prudence. Bien que 99 % des erreurs ne doivent pas être traitées sur site mais par un gestionnaire d’erreurs à l’échelle du site. Vous pouvez en savoir plus sur ce sujet dans mon article sur Rapport d'erreurs PHP.