mysql - problème avec 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 : mysql - problème avec LAST_INSERT_ID()

par pafLaXe » 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:

par Invité » 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 !

par iclo » 15 mai 2006, 09:33

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

par Cyrano » 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

par pafLaXe » 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...

par Cyrano » 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

par pafLaXe » 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.

par Cyrano » 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é.

mysql - problème avec LAST_INSERT_ID()

par pafLaXe » 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