mysqli_report
mysqli_report($flags)
Décide de ce qui se passe lors d’une erreur de connexion ou de requête. Avec MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT, elle lève une mysqli_sql_exception – l’erreur ne peut alors pas passer inaperçue. Jusqu’à PHP 8.0, la valeur par défaut était MYSQLI_REPORT_OFF (la fonction renvoie seulement false), depuis PHP 8.1 les exceptions sont le comportement par défaut. Le réglage vaut pour tout le script.
Paramètres
- $flags – une combinaison d’indicateurs :
MYSQLI_REPORT_OFF(rien),MYSQLI_REPORT_ERROR(erreurs comme avertissements),MYSQLI_REPORT_STRICT(exceptions au lieu d’avertissements),MYSQLI_REPORT_INDEX(signale aussi les requêtes sans index – seulement pour le débogage),MYSQLI_REPORT_ALL.
Exemples
// le même comportement en PHP 7.4 et 8.x : les erreurs comme exceptions
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$db = mysqli_connect("localhost", "user", "password", "shop");
try {
mysqli_query($db, "SELECT missing_column FROM products");
} catch (mysqli_sql_exception $e) {
echo $e->getCode(); // 1054
}
// sans exceptions : la fonction renvoie false et l’erreur doit être vérifiée à la main
mysqli_report(MYSQLI_REPORT_OFF);
var_dump(mysqli_query($db, "SELECT missing_column FROM products")); // bool(false)
echo mysqli_errno($db); // 1054
Points d’attention
- Un ancien code écrit pour PHP 7 (
if (!$result) …) s’arrête sur une exception non interceptée après le passage à PHP 8.1. Réécrivez le code avectry/catch, ou réglezMYSQLI_REPORT_OFFau début. - Avec
display_errorsactif, une exception non interceptée affiche un message avec l’utilisateur de la base et le serveur (dans les anciennes versions de PHP, même le mot de passe de l’appel de fonction dans la trace de pile) – sur un site en production,display_errorsdoit être désactivé.
Fonctions associées :
mysqli_connect()
mysqli_query()
mysqli_error()
set_exception_handler()