Maison  >  Questions et réponses  >  le corps du texte

Devons-nous vérifier manuellement les erreurs mysqli_connect() ?

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 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粉031492081P粉031492081381 Il y a quelques jours725

répondre à tous(1)je répondrai

  • P粉251903163

    P粉2519031632023-10-28 00:52:28

    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, utilisez phpinfo() 获取该信息并搜索 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

    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 exceptions die/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 » ?

    répondre
    0
  • Annulerrépondre