Page 1 sur 1

mysql - problème avec LAST_INSERT_ID()

Posté : 14 mai 2006, 04:30
par pafLaXe
Bonjour !

Je crée une table 'a' avec

une colone 'id' int(10) unsigned auto_increment et clé primaire
une colone 'name' varchar

quand j'ajoute une ligne avec INSERT INTO a SET name='bob'
le resultat de SELECT LAST_INSERT_ID() reste désespérement 0
Quelqu'un saurais pourquoi et comment svp ?

je suis sous MySQL 5.0.21 linux

Merci d'avance

Posté : 14 mai 2006, 09:00
par Cyrano
Ta requête d'insertion n'est pas conventionnelle, c'est un mélange INSERT/UPDATE

La syntaxe correcte devrait être:

Code : Tout sélectionner

INSERT INTO a(`name`) VALUES('bob');
Ensuite exécute à nouveau ta requête pour obtenir l'identifiant généré.

Posté : 14 mai 2006, 23:04
par pafLaXe
Je viens d'essayer avec cette syntaxe :

INSERT INTO a(`name`) VALUES ('homer')

et toujours rien...

SELECT LAST_INSERT_ID() renvoie toujours 0

Sous php, un mysql_insert_id() renvoie NULL (ou '' à vrai dire j'en sais rien)...

J'ai grand besoin de cette fonction dans mon code et je ne trouve pas de solution. Dans la doc, aucune restriction de fonctionnement n'est décrite, et que ce soit dans mon projet ou dans ce simple exemple, le résultat est le même. Dois-je regarder du côté d'un bug ? Je peux toujours downgrader mais ca va me faire perdre pas mal de temps...

Merci encore pour votre aide.

Posté : 14 mai 2006, 23:05
par Cyrano
Fais donc voir le bout de code de ton script où tu exécutes successivement tes deux appels : la requête et la demande du dernier identifiant... :-k

Posté : 15 mai 2006, 01:39
par pafLaXe
J'ai reproduit le problème dans phpMyAdmin

Je crée une table avec cette requete (auto generee par phpmyadmin) :

Code : Tout sélectionner

CREATE TABLE `a` ( `id` int(10) unsigned NOT NULL auto_increment, `name` varchar(10) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
Puis j'ajoute une ligne (soit directement par une requete sql, soit par l'interface de phpmyadmin, le résultat est le même) :

Code : Tout sélectionner

INSERT INTO a( `name` ) VALUES ( 'mickey' )
Puis viens le moment tant redouté :

Code : Tout sélectionner

SELECT LAST_INSERT_ID()
plouf, zéro...

Je peux reproduire ça via PHP ou Python, même verdict...

Posté : 15 mai 2006, 06:38
par Cyrano
Là, j'avoue que ça m'échappe un peu. J'ai repris exactement ton code et je l'ai testé en local via la ligne de commande MySQL, voici ce que j'ai obtenu:

Code : Tout sélectionner

mysql> CREATE TABLE `a` ( -> `id` int(10) unsigned NOT NULL auto_increment, -> `name` varchar(10) NOT NULL, -> PRIMARY KEY (`id`) -> ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ; Query OK, 0 rows affected (0.09 sec) mysql> mysql> INSERT INTO a( `name` ) VALUES ('mickey'); Query OK, 1 row affected (0.05 sec) mysql> mysql> SELECT LAST_INSERT_ID(); +------------------+ | LAST_INSERT_ID() | +------------------+ | 1 | +------------------+ 1 row in set (0.00 sec)
En clair, ça fonctionne parfaitement. Je saisis donc mal pour quelle raison ça bafouille chez toi :-k

Posté : 15 mai 2006, 09:33
par iclo
Déja l'insertion est elle réellement effectuée ?

Posté : 15 mai 2006, 19:33
par Invité
iclo > oui l'insertion marche bien.

Je vien d'essayer sur mon serveur prod en mysql4, meme délire...
Je me suis rendu compte alors qu'en modifiant à la main la valeur du prochain auto-increment :

Code : Tout sélectionner

ALTER TABLE `a` AUTO_INCREMENT =4
LAST_INSERT_ID ne renvoie plus 0, mais la valeur 'auto-increment, ce qui est erroné...

Je nage en plein délire !

Posté : 15 mai 2006, 22:01
par pafLaXe
Il faut que le insert et le select se fasse dans la meme connexion à mysql ! ca m'a completement échapé :oops: