gpt4 book ai didi

php - 拉维尔 : LAST_INSERT_ID() is 0 after insert?

转载 作者:行者123 更新时间:2023-11-29 02:43:05 24 4
gpt4 key购买 nike

我有以下工作查询:

$year         = 2019;
$month = 6;
$stmt = $db->prepare('INSERT INTO officeRechNr (jahr,monat,zahl) VALUES (?,?,1) ON DUPLICATE KEY UPDATE zahl = LAST_INSERT_ID(zahl+1)');
$stmt->bind_param('ii', $year, $month);
$stmt->execute();
echo $db->insert_id;

officeRechNr 具有唯一的主索引 ['jahr','monat']zahl 是一个 indexautoincrement

所以如果表 officeRechNr 是空的,我执行代码 5 次,那么输出是

1, 2, 3, 4, 5

我试图在 Laravel 5 中翻译它

\DB::select(DB::raw('INSERT INTO officeRechNr (jahr,monat,zahl) VALUES (?,?,1) ON DUPLICATE KEY UPDATE zahl = LAST_INSERT_ID(zahl+1)'),[2019,6]);

return DB::select('SELECT LAST_INSERT_ID()');

但是,如果我执行此代码 5 次,我会得到

0, 2, 3, 4, 5

虽然它在第一次插入后返回 0,但是 zahl 列中有一个 1。

enter image description here

为什么我的 Laravel 代码在第一次插入后不返回 1?

最佳答案

简答:SELECT_LAST_INSERT_ID() 不会在第一次插入时起作用(请参见下面的示例)。而是使用 \DB::getPdo()->lastInsertId();


为什么 SELECT_LAST_INSERT_ID() 在第一次插入时不起作用

此处说明:https://dev.mysql.com/doc/refman/5.7/en/information-functions.html#function_last-insert-id

With no argument, LAST_INSERT_ID() returns a BIGINT UNSIGNED (64-bit) value representing the first automatically generated value successfully inserted for an AUTO_INCREMENT column as a result of the most recently executed INSERT statement.

automatically generated是auto列自己增加,不是我设置的。

例子:

像这样绘制一个表测试:

CREATE TABLE test (
id INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
name VARCHAR(10) NOT NULL
);

现在

$sql = 'INSERT INTO test ( id, name ) VALUES (33, "ADAM")';
$db->query($sql);
echo $db->insert_id;
$result = $db->query('SELECT LAST_INSERT_ID()');
$row = $result->fetch_assoc();
print_r($row);

返回

33

array('SELECT_LAST_INSERT_ID()' => 0);

做同样的事情

$sql = 'INSERT INTO test (  name ) VALUES ("Eba")';

返回

1

array('SELECT_LAST_INSERT_ID()' => 1);

所以在第一条语句中:

$stmt         = $db->prepare('INSERT INTO officeRechNr (jahr,monat,zahl) VALUES (?,?,1) ON DUPLICATE KEY UPDATE zahl = LAST_INSERT_ID(zahl+1)');

SELECT_LAST_INSERT_ID() 为 0,因为 AI key 不是自动生成,尽管表中的 ID 为 1。它适用于连续数字的原因是

If expr is given as an argument to LAST_INSERT_ID(), the value of the argument is returned by the function and is remembered as the next value to be returned by LAST_INSERT_ID().

关于php - 拉维尔 : LAST_INSERT_ID() is 0 after insert?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47434607/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com