Page 1 sur 1

récupérer la valeur d'un auto-incrément dans une variable

Posté : 16 nov. 2005, 15:13
par manfried
Bonjour,

je débute en php et en mysql et je retrouve confronté à un problème.

idéalement, il faudrait que je puisse envoyer la requête suivante:

INSERT INTO cities (id, owner_id, name) VALUES ('null', SELECT LAST_INSERT_ID(ID) FROM users, 'nom')

seulement, j'ai une version mysql < 4.1 et donc les requêtes imbriquées ne fonctionnent pas.

J'ai alors essayé comme ceci:
INSERT INTO cities (id, owner_id, name) SELECT 'null', LAST_INSERT_ID(ID), 'nom' FROM users

mais cette requête me crée deux tuples au lieu d'un seul, je suppose que c'est lié au fait que les champs id de cities et users sont tout deux auto-incrementés.

J'ai donc pensé faire ceci:

Code : Tout sélectionner

sql$ = "SELECT LAST_INSERT_ID(ID) FROM users"; $last_id = mysql_query($sql);
afin de pouvoir faire ensuite:

Code : Tout sélectionner

sql$ = "INSERT INTO cities(id, owner_id, name) VALUES ("$id","$last_id$",'"$nom$"')"; $res = mysql_query($sql);
Seulement en fait si j'affiche $last_id j'obtiens Resource id #3

Ma question est donc: comment pourrais-je faire pour récuperer la dernière valeur de cet incrément ?

Merci d'avance

Posté : 16 nov. 2005, 15:21
par Cyrano
Tu as sauté une étape : mysql_query retourne une ressource et non une valeur scalaire. Correction:
$sql_1   = "SELECT LAST_INSERT_ID(ID) FROM users";
$exec_1  = mysql_query($sql_1); // <== On récupère une ressource
$last_id = mysql_result($exec_1, 0); // <== On récupère la valeur dans la ressource

$sql_2 = "INSERT INTO cities(id, owner_id, name) ".
         "VALUES (". $id. ",". $last_id .",'". $nom ."')";
$res   = mysql_query($sql_2);
Fais également attention quand tu écris un nom de variable: c'est $variable et non variable$ ni $variable$

Posté : 16 nov. 2005, 15:23
par manfried
Merci je vais essayer ça
Fais également attention quand tu écris un nom de variable: c'est $variable et non variable$ ni $variable$
Oups :oops: variable$ c'est un vieux reste de qbasic dont j'ai du mal à me défaire

Posté : 16 nov. 2005, 15:39
par Augure
Il y a la fonction mysql_insert_id qui peut peut être t'aider. Retourne l'identifiant généré par la dernière requête INSERT MySQL . Cela donne une solution plus courte.
$sql_1   = "Mon Insert ...."; 
$res = mysql_query($sql_1); 

$last_id = mysql_insert_id(); // <== On récupère la valeur dans la ressource 
$sql_2 = "INSERT INTO cities(id, owner_id, name) ". 
         "VALUES (". $id. ",". $last_id .",'". $nom ."')"; 
$res   = mysql_query($sql_2); 

Posté : 16 nov. 2005, 16:17
par manfried
$sql_1   = "SELECT LAST_INSERT_ID(ID) FROM users";
$exec_1  = mysql_query($sql_1); // <== On récupère une ressource
$last_id = mysql_result($exec_1, 0); // <== On récupère la valeur dans la ressource
ça me récupère toujours 1 quelque soit la valeur de mon auto_increment :?

Posté : 16 nov. 2005, 17:40
par iclo
Je me demande ce que tu veux faire, car si c'est ce que je crois il y a une solution beaucoup plus simple. Donc si tu peux nous expliquer en détails ce que tu dois faire...