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

Langage PHP Discussion :

Récupérer id auto incrémenté PDO


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2010
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2010
    Messages : 109
    Points : 104
    Points
    104
    Par défaut Récupérer id auto incrémenté PDO
    Bonjour,

    Je souhaite récupérer l'ID auto incrémenté lors d'un INSERT en BDD.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $pdo_options[PDO::ATTR_ERRMODE]=PDO::ERRMODE_EXCEPTION;
    $bddConnect = 'mysql:host='.$config['bddHost'].';dbname='.$config['bddNom'];
    $bdd = new PDO($bddConnect,$config['bddLogin'],$config['bddPwd'],$pdo_options);
    // Requête SQL
    $sqlInsertInto =  "INSERT INTO switch VALUES ('','".$_POST['inputDateReception']."','".$_POST['selectEtat']."','".$_POST['inputSerieUn']."','".$_POST['inputSerieDeux']."','".$_POST['textareaCommentaire']."','".$_POST['selectModele']."','".$_POST['selectCommande']."')";
    // Ajout de l'équipement
    $count = $bdd->exec($sqlInsertInto);	
    $rep = mysql_insert_id();
    mysql_insert_id(); me retourne 0 tout le temps.

    mysql_insert_id(); doit s'utiliser uniquement après un mysql_query peut-être .
    Comment faire en PDO ?

  2. #2
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2010
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2010
    Messages : 109
    Points : 104
    Points
    104
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo $bdd->lastInsertId();
    Apparemment ceci fonctionne mais la fonction lastInsertId() est appelé sur $bdd, je sais pas si il y a des sémaphores qui protège cette données, mais je trouve assez bancal si plusieurs requêtes sont faites sur des tables différentes, non ?

  3. #3
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Salut

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo $bdd->lastInsertId();
    C'est bien lastInsertId() qui faut faire pour PDO

    je sais pas si il y a des sémaphores qui protège cette données, mais je trouve assez bancal si plusieurs requêtes sont faites sur des tables différentes, non ?
    Il faut juste l'appeler le plus tôt possible, donc dans l'idéal tout de suite après l'insertion.
    Les autres autres aussi à faire dans la foullée (faut limiter les traitements entre).

    Une requête met que quelque 100ème de secondes (si ce n'est pas moins), les risques sont théoriquement faibles.

    Si un tel cas arrive ça sous entend avoir des accès concurrents.
    Si tu estimes que les probabilités sont fortes dans ton cas alors il y a les transactions qui devraient garantir ça.
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  4. #4
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2010
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2010
    Messages : 109
    Points : 104
    Points
    104
    Par défaut
    Citation Envoyé par RunCodePhp Voir le message
    Salut

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo $bdd->lastInsertId();
    C'est bien lastInsertId() qui faut faire pour PDO

    Il faut juste l'appeler le plus tôt possible, donc dans l'idéal tout de suite après l'insertion.
    Les autres autres aussi à faire dans la foullée (faut limiter les traitements entre).

    Une requête met que quelque 100ème de secondes (si ce n'est pas moins), les risques sont théoriquement faibles.

    Si un tel cas arrive ça sous entend avoir des accès concurrents.
    Si tu estimes que les probabilités sont fortes dans ton cas alors il y a les transactions qui devraient garantir ça.
    Merci pour l'info.

    Du coup, pour assurer j'ai fait une seconde requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $rep = $bdd->query('SELECT MAX(idSwitch) FROM switch;');
    $valDerniereInsertion = $rep->fetch();

Discussions similaires

  1. [MySQL] Récupérer valeur auto-incrément après requête DELETE
    Par renaud26 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 25/01/2011, 12h36
  2. [Toutes versions] Récupérer l'Auto incrément généré par un ajout
    Par argyronet dans le forum Contribuez
    Réponses: 8
    Dernier message: 10/08/2010, 14h01
  3. Réponses: 11
    Dernier message: 23/11/2007, 09h38
  4. [SQL] Récupérer simplement la valeur de l'id "auto incrémenté"
    Par yazerty dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 26/10/2006, 12h16
  5. [auto-incrémentation] récupérer la valeur insérée
    Par laffreuxthomas dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 16/01/2005, 15h53

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