繁体   English   中英

更新时的mysqli-> insert_id(PHP)

[英]mysqli->insert_id on update (PHP)

它适用于任何人吗? :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属性的列,则此函数将返回零

来自LAST_INSERT_ID() MySQL文档:


如果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';

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM