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

Requêtes MySQL Discussion :

mysql_query me génère des doublons...


Sujet :

Requêtes MySQL

  1. #1
    Nouveau membre du Club
    Inscrit en
    Février 2003
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 51
    Points : 38
    Points
    38
    Par défaut mysql_query me génère des doublons...
    Salut à tous,

    Comme le titre est suffisamment explicite, voici mon code...



    Code mapage.php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
        $c = new connexion();
        echo "<b>Test d'INSERT dans la table TEST1 :</b><br>";
        $c->insert("test1", "id, prenom, nom, ville", "'2', 'a', 'b', 'c'");
        echo "<br>Fin<BR><BR>";

    Code de la fonction de ma classe connexion : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
        // T : nom de la table
        // C : liste des champs
        // V : valeur à insérer
     
        function insert($t, $c="", $v="") {  
     
            $laRequete="INSERT INTO $t ";
            // $laRequete est donc : INSERT INTO test1
            $laRequete .= "($c) ";
            // $laRequete est donc : INSERT INTO test1 (id, prenom, nom, ville)
            $laRequete .= "VALUES ($lesValeurs)";
            // $laRequete est enfin : INSERT INTO test1 (id, prenom, nom, ville) VALUES ('2', 'a', 'b', 'c')
     
            echo "Avant appel execution $laRequete<br>";
            mysql_query($laRequete) or $this->erreur("insert",mysql_error(),mysql_errno());
            echo "Après appel execution $laRequete<br>";
        }

    Résultat obtenu pour l'affichage de mapage.php :

    Test d'INSERT array dans la table TEST1 :

    Avant appel execution INSERT INTO test1 (id, prenom, nom, ville) VALUES ('2', 'a', 'b', 'c')

    ERREUR insert : Duplicate entry '2' for key 1 (ERREUR N° : 1062)



    Sachant qu'avant l'exécution, il n'y a rien dans ma table...
    Et aprés l'exécution, j'ai bien un tuple correspondant à ce que je veux qui se trouve dans celle-ci...
    Il tente alors je ne sais pas pkoi de l'insérer à nouveau une seconde fois d'ou l'erreur !
    Si je ne mets pas d'attribut en primary key, il m'insere le tuple 2 fois... Et là vraiment... j'y comprends plus rien

    Si vous avez une idée d'où peut provenir le problème j'en serai vraiment content... Sachez que j'ai le même probleme avec la fonction create_table qui prend en paramètre le nom et les attributs et la crée une première fois puis plante de la même manière.
    N'y a-t-il pas quelque chose à faire avant mysql_query... Un flush quelque part ou... je ne sais quoi... Ca peut pas venir de mySql ?... Pfff... Je sèche... !

    Merci de votre attention !

  2. #2
    Nouveau membre du Club
    Inscrit en
    Février 2003
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 51
    Points : 38
    Points
    38
    Par défaut
    Bon alors après nombre de test, je me rends compte que cela fonctionne nickel en local avec easyphp mais que sur iFrance ca chie...

    Je vais donc continuer à bosser sur easyphp et je verrais pour adapter ensuite en fonction de l'hébergeur...

  3. #3
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Salut

    Fais une requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SHOW CREATE TABLE `test1`
    pour voir ?
    J'imagine qu'il y a une clé dans ta table en local mais pas sur ton hébergeur.

  4. #4
    Membre éprouvé
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juin 2003
    Messages
    909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 909
    Points : 1 014
    Points
    1 014
    Par défaut précisions...
    Comment tu as déclaré tes champs? Où t'as mis un (des?) PRIMARY KEY? As tu placé un AUTO_INCREMENT

  5. #5
    Nouveau membre du Club
    Inscrit en
    Février 2003
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 51
    Points : 38
    Points
    38
    Par défaut
    Désolé de pas pouvoir vous répondre pour l'instant mais je m'y remets peut-être ce soir ou des demain soir pour le WE (C'est un projet perso et en ce moment les soirs de semaine j'ai pas la tête à coder )

    Sinon pour le schéma de ma table, le voila (à quelques champs près) :

    CREATE TABLE `test1` (
    `id` int(6) NOT NULL auto_increment,
    `prenom` varchar(20) NOT NULL default '',
    `nom` varchar(20) NOT NULL default '',
    `ville` varchar(40) default NULL,
    PRIMARY KEY (`id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;


    Le AUTO_INCREMENT=3 de la fin c'est juste la prochaine valeur qu'il va devoir prendre (car j'ai déjà 2 insert), c'est pas une auto incrémentation de 3 en 3. (Je pense que vous le savez mais je précise parce que d'un sgbd à l'autre et d'une écriture à l'autre ca pourrait porter à confusion mais ce que je vous présente là est l'export de ma table.).

    Merci de votre implication et dés ce soir j'essaie le show create table
    Yogui je ne pense pas pour l'histoire de la clé car j'ai fait un export d'easyphp vers bloc note puis copier coller sur l'hébergeur... Faudra que je vérifie... Mais justement le truc c'est que si l'hébergeur plante c'est qu'il y a bien une tentative de double insertion et qu'il refuse la seconde à cause de la clé primaire... et en local il insert sans erreurs et la table est à jour... Comprends pas :S

    C'est EasyPHP 1.8 en local et sur iFrance je peux pas vous (j'ai pas accés à ce site du boulot).

    Merci encore

  6. #6
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Laisse tomber la requête SHOW CREATE TABLE : tu viens de donner l'info dont j'avais besoin.
    Ta table dispose d'un identifiant automatique : dans ce cas, il ne faut pas spécifier le champ identifiant lors de l'insertion !

    [Edit] Ton titre induit en erreur : ton MySQL ne génère pas de doublon. En fait, il te dit qu'il est sur le point de générer un doublon et qu'il ne veut pas le faire (puisque le schéma de ta table l'interdit).

  7. #7
    Nouveau membre du Club
    Inscrit en
    Février 2003
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 51
    Points : 38
    Points
    38
    Par défaut
    J'ai souvenir qu'il insérait deux fois chaque enregistrement...

    Dans un de mes tests, avec 2 insertions successives :
    INSERT : 1, a, b, c
    INSERT : 2, d, e, f

    Je me retrouvais en base avec :
    1, a, b, c
    2, d, e, f
    1, a, b, c
    2, d, e, f

    Ce qui est troublant c'est qu'en plus il les fait s'alterner et non se suivre. Car si il devait les insérer en double au final j'aurais :
    1, a, b, c
    1, a, b, c
    2, d, e, f
    2, d, e, f

    Mais nan... Bon je revois ca ce soir et je vous tiens au courrant

    Peut-être que c'était avant de mettre la clé primaire et l'auto_increment parce que j'avais juste refais quelque test puisque la derniere fois que j'avais touché au php c'était en php3 je crois... Donc il a fallu s'y remettre un peu et j'ai repris tranquillement... Avec les explications sur les méthodes MVC... Autant dire que je suis un peu paumé
    Mais bon ca revient doucement !

    Sinon je vois ce que tu veux dire et ce soir j'essaierai de modifier mon code et de le lancer à nouveau pour mettre :
    INSERT INTO test1 (prenom, nom, ville) VALUES ('a', 'b', 'c')
    à la place de :
    INSERT INTO test1 (id, prenom, nom, ville) VALUES ('2', 'a', 'b', 'c')

    D'ailleurs est-ce que c'est :
    INSERT INTO test1 (prenom, nom, ville) VALUES ('a', 'b', 'c')
    ou
    INSERT INTO test1 (id, prenom, nom, ville) VALUES ('', 'a', 'b', 'c')
    qu'il vaut mieux écrire (enfin surtout qui marche !) ?

    Je ne suis pas sur que pour la premiere il ne gueule pas en disant qu'il manque un champ dans l'insert.
    La seconde ne me choque pas mais je ne sais pas si du coup il va mettre un id ou pas... Comme cet id est défini en not null, je pense que soit ca marche et il mets le prochain auto increment, soit il gueule

    Enfin... ceci n'est pas une question puisque je pourrais essayer directement afin de savoir

    [EDIT] J'ai vraiment pas eu 1 minute à moi hier... Je vous donnerai un ptit compte rendu ce soir ou dans le WE. Merci encore !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 18/11/2014, 20h15
  2. Pb : jointure génère des doublons
    Par patbeautifulday dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 23/03/2009, 11h43
  3. [CreateCritera] me génère des doublons
    Par TigrouMeow dans le forum Hibernate
    Réponses: 3
    Dernier message: 20/12/2006, 22h30
  4. Effacer des doublons
    Par ben53 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 12/07/2004, 17h56
  5. Réponses: 2
    Dernier message: 07/07/2004, 17h44

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