MySQL:LAST_INSERT_ID()返回0

MySQL:LAST_INSERT_ID()返回0,mysql,sql,database,Mysql,Sql,Database,我有一张测试表: 创建表(如果不存在)`test`( `id`INT(10)自动增量, 主键(`id`) )引擎=InnoDB自动增量=4; 使用这三种方法之一插入 插入'test'('id')值(NULL); 在'test'('id')中插入值(0); 插入'test`()值(); 发行 选择最后一个插入ID(); 但是查询结果总是0 PHP的mysql\u insert\u id和PDO::lastInsertId()也不会产生任何结果 我一整天都在玩弄这玩意儿,没法让它发挥作用。想法

我有一张测试表:

创建表(如果不存在)`test`(
`id`INT(10)自动增量,
主键(`id`)
)引擎=InnoDB自动增量=4;
使用这三种方法之一插入

插入'test'('id')值(NULL);
在'test'('id')中插入值(0);
插入'test`()值();
发行

选择最后一个插入ID();
但是查询结果总是
0

PHP的
mysql\u insert\u id
PDO::lastInsertId()
也不会产生任何结果

我一整天都在玩弄这玩意儿,没法让它发挥作用。想法?

你必须结合起来

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

然后您将获得最后一个插入id,它工作得非常好…请尝试一下

    $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;
    }

问题似乎在于MySQL的phpmyadmin配置文件
PersistentConnections
设置为
FALSE
,这导致每次发出查询时都会出现一个新的
CONNECTION\u ID
,因此呈现
SELECT LAST\u INSERT\u ID()
无效

更多信息,请参见后续主题


同样感谢您的帮助

对于这个问题,我只花了50美分,我注意到如果您的表没有
自动增量
设置为索引,您将不会得到大于
0
上次插入ID


我在这上面浪费了大约半个小时。结果是我一直得到
0
LAST\u INSERT\u ID()
,这对于这个表实际上是正常的。

我也有同样的问题
mysql\u insert\u id()
LAST\u insert\u id()
在带有插入查询的PHP函数中被请求时返回0


我通过从一个单独的PHP函数中请求
mysql\u insert\u id()
的值对问题进行了排序,该函数在insert query

函数之后调用,我遇到了同样的问题,但我通过创建一个事务解决了这个问题

$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”


希望这能对您有所帮助

我刚刚在mysql v5.5.25上试用过,效果很好。当您直接从mysql命令行运行查询时,会发生这种情况吗?如果这只是在通过PHP运行查询时发生的,那么可能是连接问题。我直接在命令行中运行它。我有和你一样的MySQL版本。我必须像祖宾建议的那样在一个块中发出命令吗在它们之间使它们分开。把它们放在一条线上没有区别。让我们看看。但是接下来是否可以设置一个
MySQL
触发器,在表测试
INSERT
后触发,并使用测试表中的
last\u INSERT\u id()
在连接表中创建一行?我想也可以,请使用tryTrigger
INSERT INTO tasks\u标记(id\u task,id\u tag)值(last\u INSERT\u id(),'1'))
在FK失败,因为触发器中的
最后一次插入\u ID()
已经产生了
0
好主意,但它并不总是开箱即用:,