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 :

Probleme INSERT INTO [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2008
    Messages : 41
    Par défaut Probleme INSERT INTO
    Bonjour,
    J'ai un pb avec le code suivant, seulement la premiere ligne est insérée sur 4000 dans ma table. Le tableau est bien complet et l'echo renvoit la bonne requête

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    function insertValues($myDatas,$myTable,$myConnexion){
     
        for ($c=1; $c < sizeof($myDatas); $c++) {
            $query="INSERT INTO ".$myTable." VALUES ".$myDatas[$c];
            //echo $query;
            $myConnexion->exec($query);
        }
     
        echo "insert done";
    }
    d'avance merci

  2. #2
    Membre éprouvé
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2009
    Messages : 180
    Par défaut
    Donc si tu fais un echo de ta requête tu vois qu'elle change dans ta page mais l'insert n'est pas réalisé c'est bien ça?

  3. #3
    Membre averti
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2008
    Messages : 41
    Par défaut
    oui exactement, je me demande si ça viendrait pas de mon objet connexion en PDO

  4. #4
    Membre averti
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2008
    Messages : 41
    Par défaut
    Apparament il n'y a pas d'erreur de connexion.

  5. #5
    Membre chevronné
    Avatar de djayp
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    295
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 295
    Par défaut
    Salut !

    Pour éviter de faire 4000 requête, pourquoi ne pas en avoir qu'une seule du type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function insertValues($myDatas,$myTable,$myConnexion){
     
        if(!empty($myDatas)) {   
     
            // requete qui ressemblera a : INSERT INTO matable VALUES ('valeur 1'),('valeur 2'),('valeur 3')...
            $query="INSERT INTO ".$myTable." VALUES ('".implode("'),('",$myDatas)."')";
            //echo $query;
            if($myConnexion->exec($query)) echo "insert done";
        }
     
    }
    A++

  6. #6
    Membre Expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Par défaut
    A mon avis c qu'il y a 4000 valeurs

    Mais pour un insert c pas plutôt:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    INSERT INTO table ( nomChamp1, nomChamp2, ....) VALUES ('valeur1', 'valeur2', .... )

  7. #7
    Membre Expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Par défaut
    Donc pour toi, (Deuxième post car j'ai fait un édit et j'avais le code sous les yeux) ce serait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $query="INSERT INTO ".$myTable." ( NomDuchamp ) VALUES ".$myDatas[$c];
    Dans le même genre

  8. #8
    Membre éprouvé
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2009
    Messages : 180
    Par défaut
    Ben ça dépend il faut préciser les champs si l'insertion se fait sur des champs en particulier sinon on est pas obligé.

  9. #9
    Membre chevronné
    Avatar de djayp
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    295
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 295
    Par défaut
    Citation Envoyé par Fench Voir le message
    A mon avis c qu'il y a 4000 valeurs

    Mais pour un insert c pas plutôt:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    INSERT INTO table ( nomChamp1, nomChamp2, ....) VALUES ('valeur1', 'valeur2', .... )

    En effet cela permet d'insérer une seule ligne, mais il est également possible d'insérer plusieurs lignes à la fois :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    INSERT INTO table ( nomChamp1, nomChamp2, ....) VALUES ('valeur11', 'valeur12', .... ), ('valeur21', 'valeur22', .... ), ('valeur31', 'valeur32', .... )
    A++

  10. #10
    Membre averti
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2008
    Messages : 41
    Par défaut
    En fait j'avais déjà pensé faire une insertion des 4000 lignes et des poussieres en une fois mais ça plante.
    Je pense qu'il faut faire un commit à ce moment là?

  11. #11
    Membre éclairé Avatar de s.lennon
    Inscrit en
    Juin 2009
    Messages
    66
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Juin 2009
    Messages : 66
    Par défaut
    Bonjour.

    Quand tu dis que ton insertion "plante", tu sais pourquoi ? Il se peut que ça vienne simplement du temps que ça prend qui est trop long. Tu peux nous montrer le message d'erreur ?

  12. #12
    Membre averti
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2008
    Messages : 41
    Par défaut
    oui c'est peut être à cause du temps pris mais malheureusement il ne retourne aucun message d'erreur

    voici la version du code

    Code : 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
    19
     
    function insertValues($myDatas,$myTable,$myConnexion){
     
    	for ($c=1; $c < sizeof($myDatas); $c++) {		
    		$datas.=$myDatas[$c].",";
    	}
    	// remove last ","
    	$datas=substr($datas,0,(strlen($datas)-1));	
    	//echo $datas;
    	$query="INSERT INTO ".$myTable." VALUES ".$datas.";";
    	echo $query;
    	try {
    		$myConnexion->exec($query);
    		echo "insert done"; 
    	}
    	catch (PDOException $myConnexion) {
    		die("Query error : " .$myConnexion->getMessage());
    	}	
    }
    merci pour votre aide

  13. #13
    Membre éclairé Avatar de s.lennon
    Inscrit en
    Juin 2009
    Messages
    66
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Juin 2009
    Messages : 66
    Par défaut
    Donc, si j'ai bien tout suivi :
    - tu es sûr de ta requête
    - tu es sûr de ta connexion

    Au niveau de la fonction en elle-même, je ne maîtrise pas bien la POO, du coup rien d'incohérent ne me saute aux yeux mais je peux rater quelque chose...

    Sinon bah euh... Je ne suis pas une pro de la programmation, mais quand j'ai beaucoup de valeurs à insérer, je "bidouille" en ouvrant ma connexion à chaque début de boucle et en la fermant à chaque fin de boucle, pour être sure de ne pas dépasser le temps autorisé... Si quelqu'un a mieux je suis preneuse aussi

  14. #14
    Membre averti
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2008
    Messages : 41
    Par défaut
    bon j'avance...
    lorsque je copie direct ma big requete dans phpmyadmin, j'ai ce message d'erreur (celui ci ne remonte pas via les PDOException)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 2180564 bytes) in C:\xampp\phpmyadmin\libraries\sqlparser.lib.php on line 335
    vous pensez qu'il est malgré tout possible de faire une insertion en 1 fois ? (sachant que la taille de la base va encore augmenter, aujourd'hui 4200 lignes..)

    d'avance merci

  15. #15
    Membre chevronné
    Avatar de djayp
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    295
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 295
    Par défaut
    Si ta requête est trop lourde, il vaut effectivement mieux la découper en plusieurs requêtes plus petites : 1 par ligne, ou mieux, 1 pour 100 lignes.

    Mais tu auras certainement le même problème qu'a début... Donc retour au point de départ ! Tu disais que seule la première ligne est insérée, ce qui ressemble fort à un problème de connexion.

    - Es-tu sur que dans ta fonction "exec" la connexion n'est pas refermée ?
    - Quelle librairie utilises-tu ?

    A+

  16. #16
    Membre averti
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2008
    Messages : 41
    Par défaut
    bon je galere toujours autant

    je m'oriente donc plutôt vers un "load data infile" qui semble pouvoir absorber de gros fichiers textes. (encore que celui-ci soit bien conforme à un csv -> ce qui n'est pas mon cas.. je sais c'est pas de bol !! )

    merci à tous pour votre aide en tous cas !


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

Discussions similaires

  1. probleme insert into
    Par boubounne dans le forum JDBC
    Réponses: 2
    Dernier message: 27/02/2008, 11h27
  2. [MySQL] probleme INSERT INTO
    Par marcito dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 24/07/2007, 20h03
  3. [T-SQL] Probleme INSERT INTO
    Par edevouge dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 07/06/2007, 14h16
  4. Probleme Insert INTO
    Par DjSoulz dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 28/03/2007, 09h33
  5. probleme insert into
    Par w.b. dans le forum Langage SQL
    Réponses: 2
    Dernier message: 23/02/2005, 11h34

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