Dans MySQLi, convertissez les erreurs de requête en exceptions
P粉060528326
P粉060528326 2023-08-24 11:53:00
0
2
557
<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>
P粉060528326
P粉060528326

répondre à tous(2)
P粉420958692

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_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT)

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).

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;
}

(Remarque : je le ferai $this->SQL更改为$SQL dans l'exception de renvoi.)

P粉549412038

Il y a quelque temps, j'ai résolu ce problème avec succès. Comme indiqué dans autres réponses,

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

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.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal