Si vous insérez une ligne dans une table qui contient une
colonne ayant l'attribut AUTO_INCREMENT
,
vous pouvez obtenir le dernier identifiant généré en
appelant la fonction mysql_insert_id()
.
Vous pouvez aussi récupérer cet identifiant en utilisant la
fonction LAST_INSERT_ID()
dans une requête
que vous passez à mysql_query()
.
Vous pouvez vérifier qu'un index
AUTO_INCREMENT
est utilisé en exécutant
le code suivant. Cela vérifiera aussi si la requête était
un INSERT
avec un index
AUTO_INCREMENT
:
if (mysql_error(&mysql)[0] == 0 && mysql_num_fields(result) == 0 && mysql_insert_id(&mysql) != 0) { used_id = mysql_insert_id(&mysql); }
Pour plus d'informations, voyez la section
Section 24.2.3.33, « mysql_insert_id()
».
Lorsqu'une nouvelle valeur AUTO_INCREMENT
est générée, vous pouvez l'obtenir en utilisant la commande
SELECT LAST_INSERT_ID()
avec
mysql_query()
et en lisant la valeur dans
le résultat obtenu.
Pour LAST_INSERT_ID()
, l'identifiant
généré par la dernière insertion est entretenu sur le
serveur en se basant sur la connexion. Il ne sera pas changé
par un autre client. Il ne changera pas non plus si vous
mettez à jour une autre colonne
AUTO_INCREMENT
avec une valeur normale (ni
NULL
ni 0
).
Si vous voulez utiliser l'identifiant généré pour une table et l'insérer dans une autre, vous pouvez utiliser les requêtes suivantes :
INSERT INTO foo (auto,text) VALUES(NULL,'text'); # génère un identifiant en insérant NULL INSERT INTO foo2 (id,text) VALUES(LAST_INSERT_ID(),'text'); # on l'utilise dans la seconde page
Notez que mysql_insert_id()
retourne la
valeur stockée dans une colonne
AUTO_INCREMENT
, que cette valeur ait été
générée automatiquement en enregistrant
NULL
ou 0
ou une valeur
explicite. LAST_INSERT_ID()
retourne les
valeurs générées automatiquement par
AUTO_INCREMENT
. Si vous stockez une valeur
explicite, autre que NULL
ou
0
, cela n'affecte pas le résultat de
LAST_INSERT_ID()
.
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.