|
Publicité | ||||||||||||||||||||||
|
|
#1 (permalink) |
|
Membre régulier
![]() Date d'inscription: août 2009
Messages: 115
|
Bonjour,
Quand j'enregistre une même donnée 2 fois dans ma BD, mysql me genere une erreur de ce genre: Duplicata de la clé 1 pour le ... je voulais que lorsque on tente d'enregistrer une donnée deja existante dans la BD (l'identifiant existe deja) que j'affiche un message au lieu que mysql genere une erreur. Merci bien de m'aider! |
|
|
|
|
|
#2 (permalink) |
|
Membre émérite
![]() ![]() Date d'inscription: novembre 2004
Localisation: Paris
Âge: 31
Messages: 745
|
Pour avoir une gestion fine des erreurs au niveau BDD,
je te conseille de passer par PDO qui sera en mesure de te générer des exceptions. Si tu ne passes pas par là, il te faut desactiver les erreurs sur ton mysql_query() (car dans mes souvenirs c'est un E_WARNING qui est levée) et analyser l'erreur ( mysql_query te renvoyant false, avec un mysql_errno()
__________________
Pierre 1. Dans le manuel ( PHP, MySQL,..., rayez la mention inutile), tu te plongeras à deux fois plutôt qu'aucune. 2. Dans la doc php, tu liras attentivement les sections Chaines de caractères, Tableaux et Système de fichiers 3. Un code rapide c'est bien, un code maintenable c'est mieux ... Why was the font tag an orphan ? Because it didn't have a font-family. |
|
|
|
|
|
#3 (permalink) |
![]() Date d'inscription: octobre 2009
Localisation: IdF
Messages: 253
|
Il y a plus simple pour ton cas je crois :
Il te suffit de tester AVANT d'enregistrer si la valeur que tu veux enregistrer n'existe pas déjà dans ta dB : Code :
$count = 0; $sql = "SELECT COUNT(*) AS id_existant FROM %s WHERE id= %d "; $retour = @mysql_query(sprintf($sql, mysql_real_escape_string($table), mysql_real_escape_string($data_a_tester))); $resultat = @mysql_fetch_array( $retour ); $count = $resultat['id_existant'] ; Code :
if ( $count == 0) { // c'est bon, tu peux enregistrer ... alors tu enregistres ton $data_a_tester dans ta dB } else { // c'est pas bon, la valeur existe deja dans la dB ... tu fais autre chose comme prévenir le client par ex } [EDIT] je joue un peu à Mme soleil: cette erreur est souvent générée lorsque tu essayes d'enregistrer un id primaire auto-increment qui existe déjà. Dans ce cas, prends garde au type que tu as mis pour ton id en AI : choisir int et non tinyint qui te limitera à id<128. Et quand tu y arriveras, et bien tu te trouveras en face de cette erreur "duplicate..." |
|
|
|
|
|
#4 (permalink) |
|
Membre émérite
![]() ![]() Date d'inscription: novembre 2004
Localisation: Paris
Âge: 31
Messages: 745
|
@hornetbzz : c'est également une solution mais elle a le gros désavantage de faire une deuxième requête du coup on charge un peu plus le serveur BDD.
Après tout dépend du contexte et de ce que l'on fait en cas de doublon
__________________
Pierre 1. Dans le manuel ( PHP, MySQL,..., rayez la mention inutile), tu te plongeras à deux fois plutôt qu'aucune. 2. Dans la doc php, tu liras attentivement les sections Chaines de caractères, Tableaux et Système de fichiers 3. Un code rapide c'est bien, un code maintenable c'est mieux ... Why was the font tag an orphan ? Because it didn't have a font-family. |
|
|
|
|
|
#5 (permalink) |
![]() Date d'inscription: octobre 2009
Localisation: IdF
Messages: 253
|
Certes, mais elle a le gros avantage de fonctionner directement pour un débutant pour un petit site, sans se lancer dans la PDO et une gestion des exceptions. Il faut mettre les efforts là où ils sont nécessaires.
|
|
|
|
|
|
#6 (permalink) |
|
Membre émérite
![]() ![]() Date d'inscription: novembre 2004
Localisation: Paris
Âge: 31
Messages: 745
|
Je ne suis pas complètement d'accord avec toi.
PDO est assez simple d'utilisation et les exceptions sont à utiliser dès le début. Combien de fois entends-je autour de moi, de la part de développeur expérimenté ( ou s'en prétendant ) que les exceptions c'est lourd à mettre en place et non nécessaire pour un petit traitement. Moi, je pense que l'on a un très bon système pour gérer les erreurs et qu'il serait dommage de s'en priver car on débute. Autant prendre les bonnes habitudes dès le début. De plus , cela réponde parfaitement à la question, gestion des erreurs de mysql
__________________
Pierre 1. Dans le manuel ( PHP, MySQL,..., rayez la mention inutile), tu te plongeras à deux fois plutôt qu'aucune. 2. Dans la doc php, tu liras attentivement les sections Chaines de caractères, Tableaux et Système de fichiers 3. Un code rapide c'est bien, un code maintenable c'est mieux ... Why was the font tag an orphan ? Because it didn't have a font-family. |
|
|
|
|
|
![]() |
||
gestion des erreurs mysql
|
||
| Outils de la discussion | |
|
|