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 :

PDO transactionnel


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 30
    Points : 18
    Points
    18
    Par défaut PDO transactionnel
    Bonjour à tous,

    Voila j'ai un souci sur de gros enregistrement avec pdo et le mode transactionnel.
    Voila mon code pour environ 20 000 produits dans mon fichier:

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    while ($xml = $file->read()) { // lecture d'un xml pour récuperer les bloc produits (20 000)
     
    			//récupération de l'id vendeur si il existe
    			$req= $db->prepare("SELECT id FROM `vendeur` WHERE ref = :ref");
    			$req->execute(array(':ref' => $db->quote($node->ref)));
    			$userid = $req->fetch(PDO::FETCH_ASSOC);
     
     
    	try{
    			$db->beginTransaction(); 
     
    				$db->exec( "INSERT INTO `produits` (TOUTS LES ELEMENTS PRODUITS	) VALUES ('".$db->quote(TOUTES LES VALEURS)."')");
    				//l'id pour les insert suivant
    				$produit = $db->lastInsertId();
     
    				$db->exec( "INSERT INTO `region` (`produitid`, `zone`, `ville`, `expo`) VALUES ( ".$db->quote($produit).", '".$db->quote($node->zone)."', '".$db->quote($node->ville)."', '".$db->quote($node->expo)."')");
    				$db->exec( "INSERT INTO `photo` (`produitid`, `nom`, `url`, `visible`) VALUES ( ".$db->quote($produit).", '".$db->quote($node->image)."', '".$db->quote($node->imgurl)."', '".$db->quote($node->visible)."')");
     
    				if(!empty($userid)){
    					$db->exec( "INSERT INTO `asso_prod` (`produitid`, `vendeurid`) VALUES ( ".$db->quote($produit).", ".$db->quote($userid).")");
    				}else{
    					$db->exec( "INSERT INTO `vendeur` (`nom`, `prenom`, `ref`, `email`) VALUES ( '".$db->quote($node->nom)."', '".$db->quote($node->prenom)."', '".$db->quote($node->ref)."', '".$db->quote($node->email)."')");
    					$last = $db->lastInsertId();	
    					$db->exec( "INSERT INTO `asso_prod` (`produitid`, `vendeurid`) VALUES ( ".$db->quote($produit).", ".$db->quote($last).")");				
     
    				}
     
    			$db->commit();
     
    		}catch(Exception $e) {
      			$dbh->rollBack();
      			echo "Failed: " . $e->getMessage();
    		}
    }
    Quand je fais cela rien ne se passe dans les insert. Mes tables restent vide et mon serveur part en vrac
    Avez vous une idée ?

  2. #2
    Membre actif
    Homme Profil pro
    Développeur Full Stack
    Inscrit en
    Mai 2010
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Full Stack

    Informations forums :
    Inscription : Mai 2010
    Messages : 159
    Points : 220
    Points
    220
    Par défaut
    tu utilise Donc je ne suis pas sur que tu es besoin des simples quote(') avec.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Avec PDO, tu ne peux passer tes valeurs directement en "value" ,fais quelque chose comme cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <?php
    $ajout = $bdd->prepare("INSERT  INTO visiteurs (nom, prenom,mail,VisiteurMdpSha1,VisiteurOK,Avatar) VALUES ( :nom, :prenom,:mail,:VisiteurMdpSha1,:VisiteurOK,:Avatar)");
       $ajout->bindValue(':nom', $SonNom, PDO::PARAM_STR);
       $ajout->bindValue(':prenom', $SonPreNom, PDO::PARAM_STR);
       $ajout->bindValue(':mail', $SonMail, PDO::PARAM_STR);
       $ajout->bindValue(':VisiteurMdpSha1', $mdp_sha1, PDO::PARAM_STR);
       $ajout->bindValue(':VisiteurOK', $VisiteurOK, PDO::PARAM_STR);
       $ajout->bindValue(':Avatar', $avatar, PDO::PARAM_STR);
       $ajout->execute();
    ?>

Discussions similaires

  1. Mysql5, Procédure stockée et PDO::LastInsertId()
    Par Philsmile dans le forum SQL Procédural
    Réponses: 11
    Dernier message: 10/04/2006, 13h59
  2. pdo mysql
    Par zenzo dans le forum Requêtes
    Réponses: 11
    Dernier message: 09/03/2006, 00h01
  3. [POO] PDO et fetch_INTO
    Par jeff_! dans le forum Langage
    Réponses: 6
    Dernier message: 25/01/2006, 14h22
  4. [LDAP]Utiliser l'aspect transactionnel
    Par hocinema dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 06/12/2005, 11h03
  5. Transactionnel bloquant !!!
    Par Cpt Anderson dans le forum Bases de données
    Réponses: 3
    Dernier message: 22/11/2005, 08h53

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