mysql - problème avec LAST_INSERT_ID()

Eléphanteau du PHP | 40 Messages

14 mai 2006, 04:30

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

Mammouth du PHP | 19672 Messages

14 mai 2006, 09:00

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é.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 40 Messages

14 mai 2006, 23:04

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.

Mammouth du PHP | 19672 Messages

14 mai 2006, 23:05

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
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 40 Messages

15 mai 2006, 01:39

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...

Mammouth du PHP | 19672 Messages

15 mai 2006, 06:38

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
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

ViPHP
ViPHP | 2144 Messages

15 mai 2006, 09:33

Déja l'insertion est elle réellement effectuée ?

Invité
Invité n'ayant pas de compte PHPfrance

15 mai 2006, 19:33

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 !

Eléphanteau du PHP | 40 Messages

15 mai 2006, 22:01

Il faut que le insert et le select se fasse dans la meme connexion à mysql ! ca m'a completement échapé :oops: