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ération du dernier id créé [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Femme Profil pro
    étudiante
    Inscrit en
    Septembre 2014
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : étudiante

    Informations forums :
    Inscription : Septembre 2014
    Messages : 101
    Par défaut Récupération du dernier id créé
    Bonjour,
    je débute en PHP/MySQL, je n'arrive pas à récupérer le dernier id créé pour le réutiliser plus loin. Lorsque je tente de le réutiliser plus loin, il garde toujours une valeur de 0. Pouvez-vous m'aider svp?

    Voici mon bout de 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
    20
    // Insertion du sujet dans la base de données
    $bdd = new PDO('mysql:host=XXXXX;dbname=XXXX', 'XXXXX', 'XXXXX');
    $req = $bdd->prepare('INSERT INTO forum(pseudo, sujet, datforum) VALUE(:pseudo, :sujet, NOW())');
    $req->execute(array(
        'pseudo' => $_POST['pseudo'],
        'sujet' => $_POST['sujet']));
    $req->closeCursor(); 	
    // Récupération de l'id créé
    $bdd = new PDO('mysql:host=XXXXXX;dbname=XXXXXX', 'XXXXX', 'XXXXXXX');
    $req = $bdd->prepare('SELECT LAST_INSERT_ID() FROM forum WHERE sujet = $_POST[\'sujet\']');
    $req->execute(array($_GET['suj']));
    $donnees = $req->fetch();
    $id = $donnees['idforum'];
    $req->closeCursor();
    // Insertion du commentaire et de l'id récupéré dans la base de données
    $bdd = new PDO('mysql:host=XXXXXX;dbname=XXXXXX', 'XXXXX', 'XXXXXXX');
    $req = $bdd->prepare('INSERT INTO repforum(idforum, message) VALUE(\'$id\', :message)');
    $req->execute(array(
    	'message' => $_POST['message']));
    $req->closeCursor();
    Merci d'avance pour votre aide!!!

  2. #2
    Membre Expert
    Avatar de Spartacusply
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $req = $bdd->prepare('SELECT LAST_INSERT_ID() FROM forum WHERE sujet = $_POST[\'sujet\']');
    $req->execute(array($_GET['suj']));
    C'est très bien d'utiliser les requêtes préparées mais tu as visiblement été un peu trop vite sur le sujet car ce n'est pas exactement comme cela qu'il faut les utiliser. Regarde les exemples de cette page par exemple.

  3. #3
    Modérateur
    Avatar de BakSh0
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2014
    Messages
    276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2014
    Messages : 276
    Par défaut
    En effet question requête préparé ton code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $req = $bdd->prepare('SELECT LAST_INSERT_ID() FROM forum WHERE sujet = $_POST[\'sujet\']');
    $req->execute(array($_GET['suj']));
    C'est plutôt

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $req = $bdd->prepare('SELECT LAST_INSERT_ID() FROM forum WHERE sujet = ?');
    $req->execute(array($_GET['suj']));
    Ou :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $req = $bdd->prepare('SELECT LAST_INSERT_ID() FROM forum WHERE sujet = :sujet');
    $req->execute(array(':sujet' => $_GET['suj']));
    BakSh0, Modérateur .Net & Web

    Affichez la colorisation syntaxique dans votre code en ajoutant dans votre balise : [CODE=xxx] en remplaçant xxx par le nom du langage.


    N'oubliez pas de consulter les FAQs : .Net / Web et les cours et tutoriels .Net / Web

  4. #4
    Membre confirmé
    Femme Profil pro
    étudiante
    Inscrit en
    Septembre 2014
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : étudiante

    Informations forums :
    Inscription : Septembre 2014
    Messages : 101
    Par défaut
    Merci pour cette info, j'ai corrigé l'erreur mais maintenant j'ai un message d'erreur qui apparaît que je n'avais pas avant:
    Warning: PDOStatement::execute() [pdostatement.execute]: SQLSTATE[HY093]: Invalid parameter number: parameter was not defined in .....
    L'erreur est reconnue à cette endroit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $req = $bdd->prepare('SELECT LAST_INSERT_ID() FROM forum WHERE sujet = :sujet');
    $req->execute(array($_GET['suj']));
    :-s je ne comprends pas :-s :-s :-s

  5. #5
    Modérateur
    Avatar de BakSh0
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2014
    Messages
    276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2014
    Messages : 276
    Par défaut
    Tu n'a pas lu les réponses ni la doc ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $req = $bdd->prepare('SELECT LAST_INSERT_ID() FROM forum WHERE sujet = :sujet');
    $req->execute(array($_GET['suj']));
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $req = $bdd->prepare('SELECT LAST_INSERT_ID() FROM forum WHERE sujet = :sujet');
    $req->execute(array(':sujet' => $_GET['suj']));
    BakSh0, Modérateur .Net & Web

    Affichez la colorisation syntaxique dans votre code en ajoutant dans votre balise : [CODE=xxx] en remplaçant xxx par le nom du langage.


    N'oubliez pas de consulter les FAQs : .Net / Web et les cours et tutoriels .Net / Web

  6. #6
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2012
    Messages
    631
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2012
    Messages : 631
    Par défaut
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $bdd = new PDO('mysql:host=XXXXXX;dbname=XXXXXX', 'XXXXX', 'XXXXXXX');
    tu n'as pas à créer 2 fois l'objet PDO pour initialiser la connexion avec mysql(cf.ligne 9 de ton code), une seule instance PDO suffit d'initialiser la connexion.

    Pour recuperer le dernier id inséré(pour peu qu'il soit auto-incrémenté) tu peux aussi faire appel à la méthode lastInsertId() de PDO juste après l'exécution de la requête d'insertion:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $bdd = new PDO('mysql:host=XXXXX;dbname=XXXX', 'XXXXX', 'XXXXX');
    $req = $bdd->prepare('INSERT INTO forum(pseudo, sujet, datforum) VALUE(:pseudo, :sujet, NOW())');
    $req->execute(array(
        'pseudo' => $_POST['pseudo'],
        'sujet' => $_POST['sujet']));
    $id = $bdd->lastInsertId() ;//dernier id insérer
    echo $id;

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 28/02/2007, 11h54
  2. Récupération du dernier ID
    Par rodbeck dans le forum JDBC
    Réponses: 3
    Dernier message: 23/02/2007, 14h26
  3. [MySQL] Récupération du dernier incrément avec mysql_insert_id()
    Par lodan dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 06/02/2007, 11h40
  4. Réponses: 5
    Dernier message: 29/12/2005, 07h03
  5. [PL/SQL] Curseur - Récupération du dernier élément
    Par dupont166 dans le forum Oracle
    Réponses: 5
    Dernier message: 27/12/2005, 04h57

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