Page 1 sur 1

Récupération d’un ID au moment de l’insertion

Posté : 19 janv. 2008, 18:13
par dogmongo
Bonjour,

j'ai déjà ouvert un sujet similaire il y à quelques mois mais la le problème est que je ne parviens pas à utiliser la fonction mysql_insert_id(); pour récupérer l'id et le réutiliser juste derrière dans une nouvelle requête.
Je n'ai encore jamais utilisé cette fonction peu être que mon erreur est tout bête mais je voudrais bien comprendre :?

j'ai volontairement réduit le code , c'est mysql_insert_id() le problème !

quelqu'un voit une erreur ?

merci d'avance

// creation d un numero unique par user
//requete 1
$userID = md5(uniqid(rand(), true));
                                
$query = "INSERT INTO table () VALUES()";
$mysql_result = execute_requete($query);
$idtab=mysql_insert_id(); 

//requete 2
$query2 = "INSERT INTO table2 ";
$query2.= "(idtable) VALUES('$idtab')";  
$mysql_result = execute_requete($query2);

Posté : 19 janv. 2008, 18:28
par Sékiltoyai
Quel est le problème exactement ?

Posté : 19 janv. 2008, 18:31
par dogmongo
ca ne me retourne pas l'id crée sur la premiere insertion

Posté : 19 janv. 2008, 18:38
par Sékiltoyai
Oui, j'imaginais bien, mais ca te retourne quoi ?
Et qu'est ce que tu as dans ta fonction ?

Posté : 19 janv. 2008, 18:45
par dogmongo
ca ne retourne rien du tout , tu soulève justement la question que je me pausais , fonction coupable ou pas ?

la voici :
function execute_requete($query) {
         require("config.php");
         global $nb_requete;
         $nb_requete++;
         $mysql_link = mysql_connect($HOST , $Compte ,$Pass) or die("maintenance!");
         mysql_select_db($SQL_Database, $mysql_link) or die("Maintenance!");
         $mysql_result = mysql_query($query, $mysql_link);
         mysql_close();
         return $mysql_result;
         }

Posté : 19 janv. 2008, 18:56
par cf357
Je ne me suis jamais posé la question, mais je suppose que si tu fermes ta connexion (mysql_close), tu ne pourras pas récupérer le dernier ID avec mysql_insert_id() =)

Posté : 19 janv. 2008, 19:03
par dogmongo
c'est ce que je me suis dis , j'ai essayé récupérer la clé dans la fonction même, mais ca n'a rien changé :?

Posté : 19 janv. 2008, 19:13
par cf357
Comment est-ce que tu as testé ?
Tu as retourné un tableau contenant l'ID et le résultat de la requête ?

Ou echo mysql_insert_id(); juste apres le query() ?

Posté : 19 janv. 2008, 19:15
par dogmongo
vous avez vu juste , c'est la fonction que j'aurai du améliorer , j'ai passé ma clé en variable global
 global $nb_requete,$Newsid;
merci de votre aide ca ma bien guidé :wink:

Posté : 19 janv. 2008, 19:16
par Sékiltoyai
Alors, je vais remettre les choses en place : On n'ouvre pas la connexion à chaque requète
T'as une dent contre ton serveur SQL ou quoi ?

Et bien entendu, dans la mesure où c'est le serveur qui renvoie cette information, si on ferme la connexion, on ne peux pas récupérer la dernière id insérée.

Posté : 19 janv. 2008, 19:22
par dogmongo
tu as raison il faut rapidement que je revois ma facon de créer mes requetes.

Posté : 19 janv. 2008, 19:25
par cf357
Et ne modifie pas une clé en touchant à une variable globale au sein de ta fonction ;)
Maintenant que tu ne fermeras plus ta connexion dans ta fonction execute_requete(), tu pourras te servir normalement de mysql_insert_id() dans ton script ;)

Posté : 19 janv. 2008, 21:36
par dogmongo
oui c'est tout bête ! 8-) j'avais juste à fermer la connexion dans les pages :lol: