MySQL:LAST_INSERT_ID()返回0

时间:2012-12-14 14:09:01

标签: mysql sql database

我有这个测试表:

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_idPDO::lastInsertId()也没有产生任何结果。

我一直在玩弄这一整天,无法让它发挥作用。想法?

6 个答案:

答案 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;
    }