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?
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
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.
vous devez combiner
INSERT INTO test (title) VALUES ('test');SELECT LAST_INSERT_ID();
Ensuite, vous obtiendrez le dernier identifiant d'insertion
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 .