3

它对任何人都有效吗?:P

我可以在插入时正确获取 insert_id,但不能在更新时获取。当然,contactsId 列是 AUTO_INCREMENT。

整个代码:

<?php
$mysqli = new mysqli('localhost', [USER], [PASSWORD], [DB]);
$mysqli->set_charset("utf8");

$query = 'INSERT INTO contacts (contactsName) VALUES ("Mariola")';
$result = $mysqli->query($query);
echo $mysqli->insert_id . '<br />';

$query = 'UPDATE contacts SET contactsName = "Mariola" WHERE contactsId = 289';
$result = $mysqli->query($query);
echo $mysqli->insert_id;

输出:

1514
0

我有 id 289 的记录,并且更新工作正常。

4

2 回答 2

1

这种行为在文档中描述得很清楚。

mysqli::$insert_id -- mysqli_insert_id --返回上次查询中使用的自动生成的 id

如果最后一个查询不是 INSERT 或UPDATE 语句,或者修改后的表没有具有 AUTO_INCREMENT 属性的列,则此函数将返回零

于 2014-03-12T11:41:29.843 回答
0

来自 MySQL 文档LAST_INSERT_ID()


如果expr作为 的参数给出,则该参数LAST_INSERT_ID()的值由函数返回,并作为下一个要返回的值被记住LAST_INSERT_ID()。这可以用来模拟序列:

创建一个表来保存序列计数器并对其进行初始化:

mysql> CREATE TABLE sequence (id INT NOT NULL);
mysql> INSERT INTO sequence VALUES (0);

使用该表生成序列号,如下所示:

mysql> UPDATE sequence SET id=LAST_INSERT_ID(id+1);
mysql> SELECT LAST_INSERT_ID();

UPDATE语句递增序列计数器并导致下一次调用LAST_INSERT_ID()返回更新的值。该SELECT语句检索该值。mysql_insert_id()C API 函数也可用于获取值。请参阅第 20.6.7.37 节,“<code>mysql_insert_id()”。


也许这样的事情会起作用:

$query = 'UPDATE contacts SET id = LAST_INSERT_ID(id), contactsName = "Mariola" WHERE contactsId = 289';
于 2014-03-12T14:19:57.867 回答