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 :

Récupérer des informations d'une requête avant le commit


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 226
    Par défaut Récupérer des informations d'une requête avant le commit
    Bonjour,

    J'ai un script en PHP qui importe un fichier excell contenant des informations sur des eleves et qui ajoute ces informations en BDD.
    Je fais une 1ere requete pour savoir si la classe où se trouve l'eleve existe déjà en BDD.
    Si oui pas de Pb je verifie si l'eleve existe deja aussi, s'il n'existe pas je l'ajoute dans la table eleve et met l'id de la classe en cle etrangere.
    Si non (et c'est la mon Pb) j'ajoute la classe dans ma table classe (où l'id s'auto-incremente). Puis au moment d'ajouter l'eleve, je dois recuperer l'id de la classe. Le probléme, c'est que j'utilise les transactions et commit... Il m'est donc impossible de récuperer l'id de la classe comme elle n'est pas encore en bdd.
    Il y aurait-il une façon de proceder pour le recuperer en gardant le commit? Ca m'embeterai de devoir ajouter des requetes d'effacement pour remplacer le commit...

    Merci.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Je n'ai pas compris a quoi te servait la transaction ici ni ce que seraient tes requête d'effacement.

    Tu peux cependant utiliser LAST_INSERT_ID() pendant la transaction.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 226
    Par défaut
    Bonjour et merci pour votre reponse.
    Je vais regarder ce que fait last_insert_id.

    C'est vrai que les raisons de l'utilisation de transaction ne sont pas tres claires.
    J'utilise des boucles pour pouvoir inserer plusieur eleves, mais si il y un probleme lors de l'insertion d'un eleve, je veux que rien ne soit ajoute en BDD.
    Sans les transactions, si le dernier eleve insere pose probleme, la classe ainsi que tous les precedents eleves inseres resteront en BDD, ce que je ne souhaite pas.

    PS : je viens de regarder la doc de LAST_INSERT_ID, c'est exactement ce que je cherche. A mettre en application...

  4. #4
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 226
    Par défaut
    J'ai essayé en utilisant LastInsertId() mais je rencontre encore un probléme.
    Voici mon code (sans les requêtes SQL, je suis sûr qu'elles fonctionnent)
    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
     
        //On verifie si la classe existe déjà
        $requeteVerifClasse -> bindParam(':nom_classe', $cDisso['nom_classe']);
        $return = $requeteVerifClasse -> execute() or die('Erreur SQL : verif classe');
        $data = $requeteVerifClasse -> fetch(PDO::FETCH_NUM);
     
        if ($data[0] == 0) { // Si la classe n'existe pas déjà, on l'ajoute en BDD (Ce code marche)
            $requeteClasse -> bindParam(':nom_classe', $info['nom_classe']);
            $return = $requeteClasse -> execute() or die('Erreur SQL :insert classe');
            $info['id_classe'] = $pdo->lastInsertId();
            }
     
        //Cette partie marche quand la classe est déjà existente mais pas quand on l'ajoute juste avant
        $return = $requeteDisso -> execute(
                array(
                    ':id_eleve'=>$info['id_eleve'],
                    ':nom'=>$info['nom'],
                    ':id_classe'=>$info['id_classe']
                    )
                ) or die('Erreur SQL : insert disso');
    Je me demande donc si il est possible d'ajouter l'id_classe (qui n'est pas encore ajouté en BDD puisque pas encore commit) dans le nouvel eleve ou si on est obligé d'avoir la classe vraiment ajoutée en BDD pour pouvoir utiliser son id pour le nouvel eleve?

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 226
    Par défaut
    Mea Culpa le probléme était dû à autre chose.

    Merci!

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 05/02/2010, 09h01
  2. [XL-2000] Récupérer des informations via une page web XML
    Par peofofo dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 24/04/2009, 15h46
  3. récupérer des informations d'une feuille et les placer dans une autre
    Par winclass dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 16/12/2008, 21h34
  4. [RegEx] Récupérer des informations d'une page HTML distante
    Par Marshall_Mathers dans le forum Langage
    Réponses: 2
    Dernier message: 27/02/2007, 16h49
  5. [RegEx] Extraire des informations d'une requête SQL
    Par XtofRoland dans le forum Langage
    Réponses: 13
    Dernier message: 07/03/2006, 15h59

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