Page 1 sur 1

Comportement étrange de LAST_INSERT_ID()

Posté : 09 juin 2009, 15:17
par Greg
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 ?

Posté : 09 juin 2009, 16:13
par zeus
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.

Posté : 10 juin 2009, 16:38
par Greg
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.