对任何人都有效吗?: 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的记录,更新工作正常
这个行为在文档中描述得非常清楚。
mysqli::$insert_id——mysqli_insert_id - 返回自动生成的上次查询中使用的id
如果最后一个查询不是INSERT或UPDATE语句,或者被修改的表没有AUTO_INCREMENT的列属性,此函数将返回零。
From MySQL documentation on 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节," mysql_insert_id()
"。
也许这样做会起作用:
$query = 'UPDATE contacts SET id = LAST_INSERT_ID(id), contactsName = "Mariola" WHERE contactsId = 289';