Devons-nous vérifier manuellement les erreurs mysqli_connect() ?
P粉031492081
P粉031492081 2023-10-27 10:51:49
0
1
605
Le manuel PHP de

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 avecmysqli_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粉031492081
P粉031492081

répondre à tous (1)
P粉251903163

N'affichez jamais les erreurs de connexion manuellement !

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, utilisezphpinfo() 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 deproduction, ces paramètres doivent être préservés :

  • error_reporting必须为E_ALL
  • log_errors必须开启
  • display_errors必须关闭Il fautFermer

Dans un environnement dedéveloppement

, ces paramètres doivent être préservés :
  • error_reporting必须为E_ALL
  • log_errors必须开启
  • display_errors必须开启Doit
  • activer

display_errors

Comme vous pouvez le voir dans le message d'erreur, le nom d'utilisateur et le mot de passe de votre base de données ont été divulgués à l'utilisateur final. Il s’agit d’informations sensibles que vous ne souhaitez montrer à personne. En fait, les utilisateurs ordinaires ne comprendront pas ce mystérieux message. C'est pourquoi

doit toujours être désactivé dans un environnement de production. Il est possible de consigner les erreurs sur le serveur en toute sécurité.

Avertissements et exceptionsdie/exitLes 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

Comment se connecter correctement en utilisant MySQLi

mysqli_error()

Des problèmes liés à la connexion peuvent-ils être affichés ?mysqli_error($conn)预计 mysqli 连接成功。$conn

Non. Doit être une connexion mysqli valide, sinon vous obtiendrez ce message d'erreur :

$conn->errormysqli_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>

    Derniers téléchargements
    Plus>
    effets Web
    Code source du site Web
    Matériel du site Web
    Modèle frontal
    À propos de nous Clause de non-responsabilité Sitemap
    Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!