2012-04-29 1 views
5

Je me demandais quelle est la meilleure solution pour obtenir le dernier ID inséré après une enquête mysql?Meilleur moyen de trouver le dernier ID inséré dans mysql en utilisant php

j'ai trouvé les solutions suivantes:

<?php 
function get_current_insert_id($table) 
{ 
    $q = "SELECT LAST_INSERT_ID() FROM $table"; 
    return mysql_num_rows(mysql_query($q)) + 1; 
} 
?> 

ou même en utilisant la fonction mysql_insert_id php, mais apparemment cette fonction ne fonctionne pas bien avec bigint (thats ce que je me sers pour le champ d'identification) et s'il y a beaucoup de demandes SQL consécutives, il pourrait être peu fiable.

Quelqu'un pourrait-il fournir une solution fiable et rapide pour réaliser cette tâche?

+1

Ceci est une utilisation invalide de LAST_INSERT_ID() ici. Vous le récupéreriez comme une colonne normale. mysql_num_rows() sera toujours un pour cette requête. – Corbin

+0

J'ai trouvé cette fonction sur php.net et l'affiche a affirmé que cette fonction résout tous les problèmes causés par 'mysql_insert_id'! –

+1

-1 pour poser la question au lieu de lire le manuel –

Répondre

10
+0

Eh bien c'est ma question, comment réagirait-il quand il y a beaucoup de connexions SQL consécutives et beaucoup de requêtes sql en cours d'exécution. –

+1

@AhouraGhotbi: ['LAST_INSERT_ID()'] (http://dev.mysql.com/doc/refman/5.5/en/information-functions.html#function_last-insert-id) est par connexion. – eggyal

+0

Je pense que le lien vers la documentation serait meilleur qu'un post de forum aléatoire sans citations (http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_last-insert-id). Mais, c'est correct, et la note mysql_pconnect est une bonne note. – Corbin

4

Si vous insérez plusieurs lignes à l'aide d'une seule instruction INSERT, LAST_INSERT_ID() retourne la valeur générée pour la première ligne insérée uniquement. La raison en est de permettre de reproduire facilement la même instruction INSERT contre un autre serveur.

+3

Si vous voulez copier/coller quelque chose de la documentation, vous devriez le citer. – Corbin

Questions connexes