0

我不知道为什么用 mysqli_insert_id() 返回的 id 与我预期的 id 不同。这是我的代码:

$query = "INSERT INTO payments_table (payment_type, payment_number, payment_cost, insertion_date) VALUES ( '$paymentType', '$paymentNumber', '$totalCost', NOW())";
$data = mysqli_query($dbc, $query);
$currentPayerID = mysqli_insert_id($dbc);

//DEBUG
echo 'current payerID is: ' . $currentPayerID;

由于当前有 2 行,我希望它在下次执行后回显“当前 payerID 为 3”。但是,执行此代码后,它会回显以下内容:“current payerID is 21”

几点注意事项:

  1. 此“payments_table”表有一个名为“payer_id”的列,它是主键并具有 AUTO_INCREMENT 属性。
  2. 我已经“截断”了这张表(我相信这与清空它是一样的)。

我在整个stackoverflow中进行了搜索,但有些答案不相信我所找到的是可能的。我感谢任何慷慨的帮助!

4

3 回答 3

1

你所期待的是错误的。

使用自动递增的字段允许您插入数据并通过每次插入将其递增一来生成唯一的主键。

这对您意味着返回给您的是唯一创建的 UD,而不是表中插入的行数。

于 2013-02-11T06:41:30.050 回答
0

mysqli_insert_id函数返回ID由对具有该AUTO_INCREMENT属性的列的表的查询生成的。如果最后一个查询不是INSERTorUPDATE语句,或者修改后的表没有具有该AUTO_INCREMENT属性的列,则此函数将返回零。

可能是你截断了,最后一个 id 是 20,然后它给你 21。现在尝试一次。

于 2013-02-11T06:13:48.077 回答
0

mysqli_insert_id返回最后一个 AUTO_INCREMENT值 - 如果您在调用之后payments_table调用之前插入另一个表,mysqli_insert_id您可能会得到一个意外的值。

此外,一AUTO_INCREMENT列不对应于数据库表中的行数,而是对应于表生命周期内的总行数。更准确地说,MySQL 维护一个计数器变量,每次创建新行时该变量都会递增。

以下查询将显示AUTO_INCREMENT表的下一个预期值:

SELECT AUTO_INCREMENT FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'my_database_name' AND TABLE_NAME = 'my_table_name';
于 2013-02-11T07:16:20.603 回答