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 incrément avec mysql_insert_id() [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre éprouvé Avatar de lodan
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 064
    Par défaut Récupération du dernier incrément avec mysql_insert_id()
    Bonsoir,

    J'utilise une fonction pour accéder à ma base de donnée :

    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
    function query($queryString)
    	{
    		if(!$this->connect())
    		{
    			return false;
    		}
    		if(!mysql_select_db($this->dbName, $this->linkId))
    		{
    			$this->updateError('DB::connect()<br />mysql_select_db');
    			return false;
    		}
    		$this->queryId = mysql_query($queryString, $this->linkId);
    		$this->lasIncrement = mysql_insert_id();
    		$this->updateError('DB::query('.$queryString.')<br />mysql_query');
    		if(!$this->queryId)
    		{
    			return false;
    		}
    		$this->currentRow = 0;
    		return true;
    	}
    Et je veux récupérer le dernier incrément avec une autre fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function insertId()
    	{
    		return $this->lasIncrement;
    	}
    Dans la 1ère fonction, j'ai prévu la récupération de l'incrément :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->lasIncrement = mysql_insert_id();
    Malgré cela, je ne récupère pas mon dernier incrément.

    Je ne vois pas où se trouve l'erreur.

    Merci d'avance

  2. #2
    Membre confirmé Avatar de fmh1982
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2006
    Messages : 124
    Par défaut
    mysql_insert_id recupère l'id du dernier enregistrement dans la table et il fonctionne seulement s'il y a une requête insert avant et que le champ id soit auto_increment......sinon essyae last_insert_id

  3. #3
    Membre éprouvé Avatar de lodan
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 064
    Par défaut
    Citation Envoyé par fmh1982
    mysql_insert_id recupère l'id du dernier enregistrement dans la table et il fonctionne seulement s'il y a une requête insert avant et que le champ id soit auto_increment......sinon essyae last_insert_id
    Il n'aime pas du tout
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Fatal error: Call to undefined function last_insert_id()
    J'ai bien un insert juste avant comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $queryString = "INSERT INTO ".$prefixe_table."dk_entreprise (`id_entreprise` , .... )
    VALUES ( \"\", '".$_POST["ent_raison_sociale"]."',	...)";
    $MySql->query($queryString);
    // Récupération de l'incrément de l'INSERT
    $id_gest_entreprise=$MySql->insertId();		
    $queryString = ("INSERT INTO ".$prefixe_table."ttdk_users_entreprises (`id_gest_entreprise` , `...)  
    VALUES ( '".$id_gest_entreprise."','...)");
    $MySql->query($queryString);
    Les "function" du 1er post sont dans la class "MySql"

    Merci

  4. #4
    Membre Expert
    Avatar de trotters213
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 571
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 571
    Par défaut

    c'est normal que ça ne fonctionne pas, LAST_INSERT_ID() est une fonction MySQL et non pas PHP.

  5. #5
    Membre confirmé Avatar de fmh1982
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2006
    Messages : 124
    Par défaut
    et ta requête fonctionne bien, t'arrive à insérer des données dans tes tables ??

  6. #6
    Membre éprouvé Avatar de lodan
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 064
    Par défaut
    Citation Envoyé par fmh1982
    et ta requête fonctionne bien, t'arrive à insérer des données dans tes tables ??
    Insérer ne pose aucun problème, c'est la récupération de l'incrément de l'insert pour mettre à jour une autre table qui me pose problème.

    Dans l'insert sur le post, je n'ai pas présenté la totalité des champs de ma table bien sur.

    J'ai essayé ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $queryString = "INSERT INTO ".$prefixe_table."dk_entreprise (`id_entreprise` , .... )
    VALUES ( \"\", '".$_POST["ent_raison_sociale"]."',	...)";
    $MySql->query($queryString);
    // Récupération de l'incrément de l'INSERT
    $id_gest_entreprise=$MySql->insertId();		
    $queryString = ("INSERT INTO ".$prefixe_table."ttdk_users_entreprises (`id_gest_entreprise` , `...)  
    VALUES ( '".$id_gest_entreprise."','...)");
    $MySql->query($queryString);
    // Récupération de l'incrément de l'INSERT
    $queryString ="SELECT LAST_INSERT_ID() from dk_entreprise";			$id_gest_entreprise=$MySql->queryOneRecord($queryString);
    Mais dans "$id_gest_entreprise", je ne récupère rien.

  7. #7
    Membre éprouvé Avatar de lodan
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 064
    Par défaut
    Merci, j'ai fini par trouver dans la doc en anglais :

    If you want to use the ID that was generated for one table and insert it into a second table, you can use SQL statements like this:

    INSERT INTO foo (auto,text)
    VALUES(NULL,'text'); # generate ID by inserting NULL
    INSERT INTO foo2 (id,text)
    VALUES(LAST_INSERT_ID(),'text'); # use ID in second table
    Donc j'ai directement mis "LAST_INSERT_ID()" dans mon 2ème insert sans chercher à le récupérer dans un champ intermédiaire et le tour est joué.

    Merci à vous de m'avoir accompagné un bout de chemin

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

Discussions similaires

  1. Réponses: 10
    Dernier message: 13/03/2006, 14h30
  2. Réponses: 5
    Dernier message: 29/12/2005, 07h03
  3. [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
  4. Pb récupération d'une somme avec SUM()
    Par momo99 dans le forum InterBase
    Réponses: 3
    Dernier message: 01/11/2005, 15h38
  5. [DOM] Récupération d'un noeud avec critères ?
    Par elitost dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 20/10/2005, 15h27

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