101 votes

Comment obtenir le dernier ID inséré d'une table MySQL en PHP ?

J'ai une table dans laquelle de nouvelles données sont fréquemment insérées. J'ai besoin d'obtenir le tout dernier ID de la table. Comment faire ?

Est-il similaire à SELECT MAX(id) FROM table ?

1 votes

Oui, vous cette requête retournera le dernier id de la table. Mais une condition est que l'ID doit être une clé primaire. Ainsi vous pouvez éviter le repentir.

0 votes

Utilisez mysql_insert_id() fonction. Voir question similaire aquí

8 votes

@sathish : Le principal problème de cette méthode est Concurrence .

138voto

deceze Points 200115

Si vous utilisez PDO, utilisez PDO::lastInsertId .

Si vous utilisez Mysqli, utilisez mysqli::$insert_id .

Si vous utilisez toujours Mysql :

*S'il vous plaît, n'utilisez pas `mysql_` fonctions dans le nouveau code** . Ils ne sont plus entretenus et sont officiellement dépréciés . Voir le boîte rouge ? Apprendre déclarations préparées à la place, et utiliser AOP o MySQLi - cet article vous aidera à choisir. Si vous choisissez PDO, voici un bon tutoriel .

Mais si vous devez le faire, utilisez <a href="http://php.net/manual/en/function.mysql-insert-id.php" rel="noreferrer"><code>mysql_insert_id</code></a> .

0 votes

Le problème est que si vous avez beaucoup d'insertions (par exemple, votre base de données enregistre également quelque chose), vous pouvez obtenir un mauvais identifiant.

0 votes

@Mike Pas si vous utilisez mysql_insert_id juste après votre mysql_query . Si, bien sûr, vous exécutez plusieurs autres requêtes sur la même connexion entre-temps, eh bien, rien ne peut vous aider.

7 votes

Pour garantir que vous n'obtiendrez JAMAIS d'identifiant erroné, entourez votre code d'une balise de type TRANSACTION .

55voto

RageZ Points 15212

Il existe une fonction permettant de savoir quel est le dernier identifiant inséré dans la connexion en cours.

mysql_query('INSERT INTO FOO(a) VALUES(\'b\')');
$id = mysql_insert_id();

plus l'utilisation max es un mauvaise idée parce que cela pourrait conduire à problèmes si votre code est utilisé en même temps dans deux sessions différentes.

Cette fonction est appelée mysql_insert_id

2 votes

Mysql_(...) est déprécié dans la version PHP >= 5.5.

0 votes

Oui, je m'en souviens. :)

23voto

Neal Points 68710

Avec AOP :

$pdo->lastInsertId();

Avec Mysqli :

$mysqli->insert_id;

*S'il vous plaît, n'utilisez pas `mysql_` fonctions dans le nouveau code** . Ils ne sont plus entretenus et sont officiellement dépréciés . Voir le boîte rouge ? Apprendre déclarations préparées à la place, et utiliser AOP o MySQLi - cet article vous aidera à choisir. Si vous choisissez PDO, voici un bon tutoriel .

0 votes

22voto

x2. Points 5652

C'est bon. Vous pouvez également utiliser LAST_INSERT_ID()

1 votes

Pourquoi dites-vous que select max(id)from table est OK ?

9voto

NawaMan Points 10266

Utilisez mysql_insert_id() fonction.

Voir question similaire aquí

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X