Maison > Questions et réponses > le corps du texte
mysqli_connect()
recommande de vérifier la valeur de retour et d'afficher un message d'erreur à l'écran.
$link = mysqli_connect("127.0.0.1", "my_user", "my_password", "my_db"); if (!$link) { echo "Error: Unable to connect to MySQL." . PHP_EOL; echo "Debugging errno: " . mysqli_connect_errno() . PHP_EOL; echo "Debugging error: " . mysqli_connect_error() . PHP_EOL; exit; }
De même, pour les constructeurs de style POO, ceci est recommandé :
$mysqli = new mysqli('localhost', 'my_user', 'my_password', 'my_db'); if ($mysqli->connect_error) { die('Connect Error (' . $mysqli->connect_errno . ') ' . $mysqli->connect_error); }
Certains utilisateurs de Stack Overflow ont même utilisé du code avec mysqli_error($conn)
comme ceci :
$conn = mysqli_connect('localhost', 'a', 'a'); if (!$con) { die('Could not connect: ' . mysqli_error($conn)); }
Mais depuis quelques semaines, je me pose la question : pourquoi dois-je faire ça ? Le résultat du premier exemple est :
Attention : mysqli_connect() : (HY000/1045) : accès utilisateur refusé 'my_user'@'localhost' (utiliser le mot de passe : OUI) C:xampp...mysqli.php ligne 4
Erreur : Impossible de se connecter à MySQL. Numéro d'erreur de débogage : 1045 Débogage Erreur : Accès refusé pour l'utilisateur "my_user"@"localhost" (en utilisant le mot de passe : Oui)
Comme vous pouvez le constater, le message d'erreur s'affiche deux fois ! Le « débogage » manuel fournit en réalité moins d’informations.
Devrions-nous vérifier manuellement les erreurs de connexion ? Pouvons-nous obtenir plus d’informations que les avertissements automatisés de cette façon ? Est-ce une pratique recommandée ?
P粉2519031632023-10-28 00:52:28
MySQLi générera un avertissement s'il ne parvient pas à ouvrir une connexion à MySQL. Cet avertissement vous indique tout ce que vous devez savoir, y compris le code d'erreur, le message d'erreur et l'endroit où l'erreur s'est produite dans le code. La vérification manuelle des erreurs ne vous donnera pas plus d'informations.
Si vous ne voyez pas d'avertissements et ne parvenez pas à créer une connexion, cela signifie probablement que votre PHP n'est pas configuré pour les afficher. Dans ce cas, vous devez vérifier le fichier journal des erreurs sur le serveur. Si vous ne savez pas où il se trouve, utilisez phpinfo() code>
获取该信息并搜索 error_log
. Il vous indiquera où se trouvent les fichiers journaux d’erreurs.
S'il n'y a aucun avertissement dans le journal des erreurs, cela signifie probablement que votre rapport d'erreurs PHP a été réduit au silence (complètement ou juste des avertissements). Vérifiez votre configuration PHP.
Dans un environnement de production, ces paramètres doivent être préservés :
error_reporting
必须为 E_ALL
log_errors
必须开启
display_errors
必须关闭
Il faut Fermer
Dans un environnement de développement
, ces paramètres doivent être préservés :error_reporting
必须为 E_ALL
log_errors
必须开启
display_errors
必须开启
Doit activer
display_errors
Avertissements et exceptions
die/exit
Les avertissements n'arrêtent pas le script. Si un avertissement est émis, le script poursuivra son exécution jusqu'à ce qu'une erreur fatale soit rencontrée. Dans la plupart des cas, vous devez lever une exception pour arrêter le script. N'utilisez pas
Si la connexion mysqli ne peut pas être établie, une exception doit être levée, qui, si elle n'est pas gérée, apparaîtra et arrêtera le script avec une erreur fatale. Vous pouvez configurer MySQLi pour qu'il lève automatiquement des exceptions. Ceci est inestimable car toutes les fonctions mysqli peuvent échouer pour diverses raisons, et elles ne vous informeront d'aucun problème à moins que vous ne vérifiiez manuellement chacune d'elles pour détecter les erreurs. Utilisez la ligne suivante avant d'ouvrir la connexion :
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli('localhost', 'my_user', 'my_password', 'my_db');
Ne détectez pas les exceptions à moins de savoir vraiment comment les gérer ! Un cas d'utilisation possible est décrit dans
mysqli_error()
Des problèmes liés à la connexion peuvent-ils être affichés ? mysqli_error($conn)
预计 mysqli 连接成功。 $conn
$conn->error
和 mysqli_error($conn)
ne peut afficher aucune erreur liée à la connexion !
Connexe : Dois-je vérifier manuellement les erreurs lors de l'appel de « mysqli_stmt_prepare » ? p>