IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

gestion des erreurs mysql


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Inscrit en
    Août 2009
    Messages
    308
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 308
    Points : 50
    Points
    50
    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!

  2. #2
    Membre éprouvé Avatar de FCYPBA
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 745
    Points : 952
    Points
    952
    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.

  3. #3
    Membre éclairé
    Avatar de hornetbzz
    Homme Profil pro
    Directeur commercial
    Inscrit en
    Octobre 2009
    Messages
    482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France

    Informations professionnelles :
    Activité : Directeur commercial

    Informations forums :
    Inscription : Octobre 2009
    Messages : 482
    Points : 773
    Points
    773
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    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..."

  4. #4
    Membre éprouvé Avatar de FCYPBA
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 745
    Points : 952
    Points
    952
    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.

  5. #5
    Membre éclairé
    Avatar de hornetbzz
    Homme Profil pro
    Directeur commercial
    Inscrit en
    Octobre 2009
    Messages
    482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France

    Informations professionnelles :
    Activité : Directeur commercial

    Informations forums :
    Inscription : Octobre 2009
    Messages : 482
    Points : 773
    Points
    773
    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.

  6. #6
    Membre éprouvé Avatar de FCYPBA
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 745
    Points : 952
    Points
    952
    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.

Discussions similaires

  1. Problème de gestion des erreurs MySQL
    Par Crygamers dans le forum Langage
    Réponses: 2
    Dernier message: 09/07/2012, 14h50
  2. Réponses: 9
    Dernier message: 24/11/2008, 14h11
  3. gestion des erreurs mysql
    Par PAYASS59 dans le forum Administration
    Réponses: 1
    Dernier message: 04/07/2008, 09h54
  4. gestion des erreurs mysql
    Par sefir dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 12/12/2007, 14h23
  5. [VB6 + Mysql]Gestion des erreurs de connexion
    Par Deejoh dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 25/01/2006, 21h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo