Rappel : si vous travaillez sur votre ordinateur personnel, vous devez avoir créer la base de données de test pour que les exemples puissent être utilisés.
Quelle que soit la phase de traitement il est primordial de gérer les erreurs qui peuvent se produire avec la base de données.
Les erreurs empêchant une connexion correcte doivent être traitées immédiatement sinon des erreurs en cascade se produiront car toutes les requêtes ennoyées au serveur MySQL échoueront.
Dans l'exemple suivant, nous tentons une connexion avec un mauvais mot de passe pour examiner ce qui se passe dans le cas d'une erreur.
Comme nous pouvons le constater une erreur de connexion n'arrête
pas le déroulement du script, et entraîne de nombreuses erreurs en
cascade. Pour un utilisateur non averti, ces messages sont
particulièrement déstabilisants. Pour un utilisateur averti, et c'est
pire, ces messages donnent des informations sur le serveur de la base
de données, et les répertoires du serveur Web.
Exemple : le
nom d'utilisateur apparait dans
Warning:
mysqli_connect() ... : Access denied for user
'tuto_user'@'localhost'...
Pour cacher les messages d'erreurs, PHP propose une solution pratique et simple à mettre en oeuvre : il suffit d'ajouter le caractère @ (arobase) devant la fonction.
Attention : cacher un message d'erreur ne supprime pas l'erreur.
Ci dessous notre script modifié :
Plus aucun message d'erreur ... Mais le résultat ('Il y a livres dans notre base') peut laisser perplexe. De plus si l'utilisation de @ est facile, elle devient vite fastidieuse s'il faut préfixer toutes les fonctions. Et surtout : les erreurs sont toujours là.
Ce qui nous importe pour le moment, c'est uniquement la partie connexion : si la connexion échoue nous devons arrêter le traitement de la page en prévenant l'utilisateur avec un message facilement compréhensible.
Si la connexion échoue, la fonction mysqli_connect() renvoie FALSE. Nous pouvons donc tester le résultat de la fonction et définir un traitement particulier si elle échoue. Par exemple :