28

我有这个测试表:

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.

PHPmysql_insert_idPDO::lastInsertId()没有产生任何结果。

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

4

6 回答 6

26

问题似乎出在 MySQL 的 phpmyadmin 配置文件PersistentConnections中,每次发出查询时都会FALSE产生一个新的配置文件 - 因此呈现无效。CONNECTION_IDSELECT LAST_INSERT_ID()

后续主题中的更多信息每个查询都会创建一个新的 CONNECTION_ID()

也感谢dnagirl的帮助

于 2012-12-14T16:43:06.603 回答
20

对于这个问题,我只花了 50 美分,我只是注意到如果你的表没有设置索引,你不会得到LAST_INSERT_ID更大的收益。0AUTO_INCREMENT

我在这上面浪费了大约半个小时。结果我一直得到一个LAST_INSERT_ID()of 0,这对于这张桌子来说实际上是可以的。

于 2014-09-08T19:29:06.113 回答
12

你必须结合

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

然后你会得到最后一个插入id

于 2012-12-14T14:13:01.280 回答
1

我遇到过同样的问题。mysql_insert_id()LAST_INSERT_ID()在带有INSERT 查询的 PHP 函数内请求时返回 0 。

我通过从在INSERT 查询mysql_insert_id()的函数之后调用的单独 PHP 函数请求值来对问题进行排序。

于 2016-04-25T21:28:24.093 回答
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”

希望能帮到你

于 2019-10-03T12:44:56.660 回答
-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;
    }
于 2012-12-14T14:39:41.160 回答