web-dev-qa-db-fra.com

MySQL: LAST_INSERT_ID () renvoie

J'ai cette table de test: 

CREATE TABLE IF NOT EXISTS `test` (    `id_huh` bigint(10) unsigned
NOT NULL AUTO_INCREMENT,   `title` varchar(255) NOT NULL DEFAULT
'test',   PRIMARY KEY (`id_huh`),   KEY `id_huh` (`id_huh`) )
ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;

l'insertion en utilisant l'un de ces trois

INSERT INTO `test` (`id_huh`, `title`) VALUES (NULL, 'test')
INSERT INTO `test` (`id_huh`, `title`) VALUES (0, 'test')
INSERT INTO `test` (`title`) VALUES ('test')

et émission 

SELECT LAST_INSERT_ID();

mais la requête aboutit toujours à 0.

mysql_insert_id et PDO::lastInsertId() de PHP ne donnent aucun résultat non plus.

J'ai joué avec toute cette journée et je ne peux pas la faire fonctionner. Des idées?

14
dwelle

Le problème semblait être dans le fichier PersistentConnections du fichier de configuration phpmyadmin de MySQL, qui avait la valeur FALSE, ce qui entraînait un nouveau CONNECTION_ID à chaque fois qu'une requête était émise, rendant ainsi SELECT LAST_INSERT_ID() inefficace.

plus d'infos dans la rubrique suivante Chaque requête crée un nouveau CONNECTION_ID ()

Merci également dnagirl for help

15
dwelle

Juste mes 50 cents pour ce problème, j'ai simplement remarqué que vous n'obtiendrez pas un LAST_INSERT_ID supérieur à 0 si votre table n'a aucun AUTO_INCREMENT défini sur un index.

J'ai perdu environ une demi-heure à ce sujet. Il se trouve que je continue à recevoir une LAST_INSERT_ID() de 0, ce qui est en fait correct pour cette table.

11
Ted

vous devez combiner 

INSERT INTO test (title) VALUES ('test');SELECT LAST_INSERT_ID();

Ensuite, vous obtiendrez le dernier identifiant d'insertion

9
user7282

J'ai eu le même problème. mysql_insert_id() ou LAST_INSERT_ID() a renvoyé 0 lorsqu'il a été demandé dans une fonction PHP avec une requête INSERT

J'ai réglé le problème en demandant la valeur de mysql_insert_id() à une fonction distincte PHP appelée juste après la fonction qui INSERT query .

1
micaball