{PHP} Réécrire les messages d’erreurs MySQL avec sa propre fonction mysql_query()
Comment réécrire les messages d’erreurs MySQL générés par mysql_error() en francais et avec son CSS.
Lorsque vous développez avec PHP vous utilisez très souvent une base de données et généralement une MySQL. Pour faire une requête une fonction mysql_query() existe et lorsqu’on débute on nous apprend souvent qu’il faut l’utiliser comme suit:
<?php
$res = mysql_query('SELECT something FROM sometable WHERE id=1');
if (!$res) {
echo('Requête invalide : ' . mysql_error());
}
?>
La fonction mysql_error() affichant un message pour vous aidez à comprendre l’erreur. Si c’est pratique en débuggant, cela fait mauvais genre lorsque le visiteur se retrouve un avec message d’erreur en anglais sur son écran.
Dans ce cas il suffit de ne pas afficher de message d’erreur?!
Et bien parfois ces messages d’erreurs sont utiles au fonctionnement du site. Par exemple lorsque vous voulez vérifier si un élément existe déjà dans la table afin de ne pas l’insérer deux fois (typiquement un nom d’utilisateur ou une adresse email pour l’ajout d’un compte).
Une première méthode consisterait à faire une requête pour savoir si l’élément a été trouvé dans la table et si ca n’est pas le cas on exécute la requête d’ajout. Une autre méthode (la bonne mon sens) est de spécifier à votre SGBD (MySQL en l’occurrence) que tel ou tel élément doit être unique et d’exécuter la requête d’ajout et afficher un message d’erreur si le paramètre existe déjà.
Réécrire la fonction mysql_query()
Dans votre fichier de fonction, définissez une fonction my_query() que vous utilisez à la place de celle fournie par PHP.
La méthode est assez simple, exécution de la requête puis selon le numéro d’erreur affichage d’un message personnalisé. Pour continuer sur l’exemple précédemment choisie je propose la fonction avec l’erreur généré si un élément doit être unique.
PHP fournit la fonction mysql_errno() qui renvoie un numéro d’erreur.
<?php
function my_query($req) {
$result = mysql_query($req);
if (mysql_errno() == 1062) {
echo "<p class='error'>Un des éléments existe déjà dans notre base de données</p>";
}
return $result;
}
?>
En faisant une fonction générique comme ci-dessus, vos messages doivent rester générique mais en en faisant des plus précise vous pouvez afficher le champs qui pose problème (une pour l’ajout de compte justement).
La liste des erreurs MySQL est disponible sur cette page.
Partagez et abonnez-vous
Twitter
Facebook
Email
Abonnez-vous
Suivez moi
