我有这个测试表:
CREATE TABLE IF NOT EXISTS `test` (
`id` INT(10) AUTO_INCREMENT,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4;
使用这三个中的任何一个插入
INSERT INTO `test` (`id`) VALUES (NULL);
INSERT INTO `test` (`id`) VALUES (0);
INSERT INTO `test` () VALUES ();
并发出
SELECT LAST_INSERT_ID();
但查询始终会生成0
。
PHP的mysql_insert_id
和PDO::lastInsertId()
也没有产生任何结果。
我一直在玩弄这一整天,无法让它发挥作用。想法?
答案 0 :(得分:16)
问题似乎是MySQL的phpmyadmin配置文件PersistentConnections
设置为FALSE
,每次发出查询时都会产生新的CONNECTION_ID
- 因此呈现SELECT LAST_INSERT_ID()
无效
后续主题Every query creates a new CONNECTION_ID()
中的更多信息还要感谢dnagirl寻求帮助
答案 1 :(得分:12)
对于这个问题我只需要50美分,我只是注意到,如果您的表没有设置为LAST_INSERT_ID
设置为索引,则不会0
大于AUTO_INCREMENT
。
我浪费了大约半小时。事实证明我一直得到LAST_INSERT_ID()
0
,这个表实际上是正常的。
答案 2 :(得分:9)
你必须结合
INSERT INTO test (title) VALUES ('test');SELECT LAST_INSERT_ID();
然后您将获得最后一个插入ID
答案 3 :(得分:1)
我有同样的问题。在具有 INSERT查询的PHP函数内请求时,mysql_insert_id()
或LAST_INSERT_ID()
返回0。
我通过在 INSERT查询的函数后面的一个单独的PHP函数中请求mysql_insert_id()
的值来对问题进行排序。
答案 4 :(得分:0)
我遇到了同样的问题,但是我已经通过创建交易解决了这个问题。
$db->begin();
$sql = "INSERT INTO 'test' VALUES('test')";
if ($db->query($sql))
{
$id = $db->last_insert_id('test');
$db->commit();
return $id;
}
else{
$db->rollback();
return -1;
}
我尝试过
return $db->last_insert_id('test');
在“提交”之后,但始终返回“ 0”
希望可以为您提供帮助
答案 5 :(得分:-2)
它完美地工作......试试吧......
$result = mysql_query("INSERT INTO `test` (`title`) VALUES ('test')");
if ($result) {
$id = mysql_insert_id(); // last inserted id
$result = mysql_query("SELECT * FROM tablename WHERE id = $id") or die(mysql_error());
// return user details
if (mysql_num_rows($result) > 0) {
return mysql_fetch_array($result);
} else {
return false;
}
} else {
return false;
}