JeuWeb - Crée ton jeu par navigateur
mysql_insert_id() - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : mysql_insert_id() (/showthread.php?tid=4449)

Pages : 1 2 3


mysql_insert_id() - php_addict - 18-11-2009

bonjour

je viens de découvrir la fonction mysql_insert_id() de mysql et je pense ne avoir besoin, mais j'hésites: voici mon questionnement:

en effet mysql_insert_id() retourne la valeur du champs qui est en auto increment apres une requete INSERT

mais si on prend ce pseudo code :

Code :
- INSERT quelque chose dans la base de donnée
- mysql_insert_id()

si le script est lancé par plusieurs internautes quasiment en meme temps, est ce que mysql_insert_id() va retourner la bonne valeur ou pas du tout ??

merci de m'avoir lu Wink

a+


RE: mysql_insert_id() - christouphe - 18-11-2009

bah il te donnera la dernière entrée...Pense aux transactions car comme tu le dis, il peux te donner un identifiant "croisé".


RE: mysql_insert_id() - php_addict - 18-11-2009

salut, donc si il y a moyen de ne pas s'en servir alors mieux vaut...c'est ce que tu veux dire?


RE: mysql_insert_id() - christouphe - 18-11-2009

dans la majorité des cas 99,9999%, les requêtes vont se trouver assez espacées dans le temps pour éviter ce genre de problème. Par contre, tu pourra bugger si par malchance, le délai entre deux requête est trop court...tu peux le simuler avec AJAX et 2 scripts qui insèrent et récupère l'identifiant. Cela te donnera un bon test.


RE: mysql_insert_id() - QuentinC - 18-11-2009

Non, il n'y a aucun risque de téléscopage possible. Le last insert id est toujours l'id généré par la dernière requête insert ou replace effectuée sur la session courante. Et comme chaque script php ouvre une nouvelle connexion à MySQL, il y a autant de sessions MySQL différentes d'ouvertes qu'il n'y a de scripts php en cours d'exécution, sauf si on demande explicitement une connexion permanente... et là même si c'est théoriquement possible, il y a peu de chances que ça arrive.


RE: mysql_insert_id() - Anthor - 18-11-2009

Merci QuentinC, y'en a un qui lit la doc au moins avant de l'ouvrir ^^

Citation :mysql_insert_id() retourne le dernier identifiant généré par un champ de type AUTO_INCREMENT, sur la connexion MySQL courante ou sûr la connexion spécifiée par link_identifier.



RE: mysql_insert_id() - php_addict - 18-11-2009

donc finalement je ne risque rien du tout? avez vous eu deja des probleme avec mysql_insert_id() ?


RE: mysql_insert_id() - Anthor - 18-11-2009

Aucun ^^


RE: mysql_insert_id() - QuentinC - 18-11-2009

Citation :avez vous eu deja des probleme avec mysql_insert_id() ?
Absolument aucun. La seule chose à laquelle il faut faire attention, c'est lorsqu'on fait des insertions multiples en une seule requête. C'est alors l'identifiant du premier enregistrement ajouté qui est retourné et non le dernier (même si c'est effectivement plus logique)


RE: mysql_insert_id() - Zamentur - 19-11-2009

Aucun non plus.
Par contre j'avais pas pensé au problème or j'ai tendance ma classe d'abstraction utilise les connections permanentes si on lui demande, je vais donc rajouter une interdiction de récupérer l'id dans un tel cas