Comportement étrange de LAST_INSERT_ID()

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Comportement étrange de LAST_INSERT_ID()

par Greg » 10 juin 2009, 16:38

Non, le problème avec mysql_insert_id(), c'est qu'il ne peut pas fonctionner avec un champ auto-incrémenté de type BIGINT ... or, c'est mon cas.

par zeus » 09 juin 2009, 16:13

Je ne suis pas sûr de répondre à ta question, mais est-ce que tu as pris garde à ces avertissements de la doc officielle de MySQL :
Le dernier ID généré est conservé par le serveur pour chaque connexion. Un autre client ne la modifiera donc pas, même s'ils génèrent une autre valeur AUTO_INCREMENT de leur coté. Ce comportement permet de s'assurer que les actions des autres clients ne perturbe pas les actions du client en cours.
J'ai le sentiment que si mysql_insert_id() ne te convient pas, c'est parce que tu voudrais récupérer le dernier id inséré, même s'il n'est pas de la session courante.

Comportement étrange de LAST_INSERT_ID()

par Greg » 09 juin 2009, 15:17

Salut à tous,

Je dois utiliser la fonction MySQL LAST_INSERT_ID() car la colonne AUTO_INCREMENT de ma table est de type BIGINT (non_signé), et une limite de la fonction PHP mysql_insert_id() m'empêche de l'utiliser.

J'ai néanmoins un comportement étrange dans mon script, car avec la requête ci-dessous, j'ai plusieurs lignes de résultats (avec tous les identifiants ajoutés) alors que je n'en attends qu'une.

Code : Tout sélectionner

SELECT LAST_INSERT_ID(adv_id) AS current_id FROM advertisements
Je me retrouve donc à faire cette requête pour limiter la casse :

Code : Tout sélectionner

SELECT LAST_INSERT_ID(adv_id) AS current_id FROM advertisements ORDER BY current_id DESC LIMIT 1
Si je ne précise pas la colonne à LAST_INSERT_ID(), il me renvoie un 0. Si je zappe les conditions, il me renvoie autant de 0 que j'ai d'enregistrements.

Est-ce moi (il y a de grandes chances) ou LAST_INSERT_ID() qui déconne ?