Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
Vieux 26/01/2010, 18h43   #1 (permalink)
Membre régulier
 
Date d'inscription: août 2009
Messages: 115
Par défaut gestion des erreurs mysql

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!
Abou Zar est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 26/01/2010, 20h00   #2 (permalink)
Membre émérite

 
Avatar de FCYPBA
 
Date d'inscription: novembre 2004
Localisation: Paris
Âge: 31
Messages: 745
Par défaut

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.
FCYPBA est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 27/01/2010, 05h50   #3 (permalink)
Relecteur
 
Avatar de hornetbzz
 
Date d'inscription: octobre 2009
Localisation: IdF
Messages: 253
Par défaut

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'] ;
Et après ça, tu testes $count :

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
}
Si tu veux juste éviter ponctuellement les 'notice', il te suffit d'ajouter @ devant les commandes.

[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..."
hornetbzz est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 27/01/2010, 10h11   #4 (permalink)
Membre émérite

 
Avatar de FCYPBA
 
Date d'inscription: novembre 2004
Localisation: Paris
Âge: 31
Messages: 745
Par défaut

@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.
FCYPBA est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 27/01/2010, 12h09   #5 (permalink)
Relecteur
 
Avatar de hornetbzz
 
Date d'inscription: octobre 2009
Localisation: IdF
Messages: 253
Par défaut

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.
hornetbzz est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 27/01/2010, 12h52   #6 (permalink)
Membre émérite

 
Avatar de FCYPBA
 
Date d'inscription: novembre 2004
Localisation: Paris
Âge: 31
Messages: 745
Par défaut

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.
FCYPBA est déconnecté   Envoyer un message privé Réponse avec citation
NEWS PHPFAQ PHPCours PHPSources PHPLivres PHPScripts PHPOutils PHPComparatifsZend Framework

Réponse Proposer ce sujet en actualité

Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL



Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are non
Pingbacks are non
Refbacks are non



Fuseau horaire GMT +1. Il est actuellement 11h09.


Vos questions techniques : forum d'entraide PHP - Publiez vos articles, tutoriels et cours
et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones
Nous contacter - Hébergement - Participez - Copyright © 2000-2010 www.developpez.com - Legal informations.