web-dev-qa-db-fra.com

Erreur de traitement pour les entrées en double - PHP MySQL

J'ai un formulaire PHP qui entre des données dans ma base de données MySQL. Ma clé primaire est l'une des valeurs entrées par l'utilisateur. Lorsque l'utilisateur entre une valeur qui existe déjà dans la table, l'erreur MySQL "Entrée en double 'valeur entrée' pour la clé 1" est renvoyée . Au lieu de cette erreur, je voudrais avertir l'utilisateur qu'il doit entrer une valeur différente. Juste un message en écho ou quelque chose comme ça ... Je pense que ma question se résume à: Comment transformer une erreur MySQL spécifique en un message PHP Merci

edit: la réponse de nickf ci-dessous est Nice, mais existe-t-il un moyen de distinguer entre des erreurs spécifiques?

23
RobHardgood

Pour vérifier cette erreur spécifique, vous devez trouver le code d'erreur . C'est 1062 pour la clé en double. Utilisez ensuite le résultat de errno() pour comparer avec:

mysql_query('INSERT INTO ...');
if (mysql_errno() == 1062) {
    print 'no way!';
}

Une note sur le style de programmation
Vous devriez toujours chercher à éviter l’utilisation de nombres magiques (je sais, c’est moi qui l’ai introduit dans cette réponse). Au lieu de cela, vous pouvez affecter le code d'erreur connu (1062) à une constante (par exemple MYSQL_CODE_DUPLICATE_KEY). Cela facilitera la maintenance de votre code car la condition dans l'instruction if est toujours lisible dans quelques mois lorsque la signification de 1062 a disparu de la mémoire :)

46
jensgram

Vous pouvez vérifier la valeur de retour à partir de mysql_query lorsque vous effectuez l'insertion.

$result = mysql_query("INSERT INTO mytable VALUES ('dupe')");

if (!$result) {
    echo "Enter a different value";
} else {
    echo "Save successful.";
}
3
nickf

essayez ce code pour gérer les entrées en double et afficher le message echo:

  $query = "INSERT INTO ".$table_name." ".$insertdata;
                if(mysqli_query($conn,$query)){
                    echo "data inserted into DB<br>";                   
                }else{
                   if(mysqli_errno($conn) == 1062)
                       echo "duplicate entry no need to insert into DB<br>";
                   else
                    echo "db insertion error:".$query."<br>";

                }//else end
1
Hassan Saeed
1
Codler

Utilisez la fonction mysql_errno(), elle renvoie les numéros d'erreur. Le numéro d'erreur pour les clés en double est 1062. Par exemple 

$query = mysql_query("INSERT INTO table_name SET ...);
if (mysql_errno() == 1062){
    echo 'Duplicate key';
}
0
Chad timothy