为mysqli_insert_id()返回的预期ID与实际不同

时间:2013-02-11 06:10:42

标签: php mysql auto-increment

我无法弄清楚为什么返回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”。但是,执行此代码后,它回显了以下内容: “当前的付款人ID是21”

一对夫妇注意到:

  1. 这个'payments_table'表有一个名为“payer_id”的列,它是一个 主键并具有AUTO_INCREMENT属性。
  2. 我已经“截断”了这个表(我相信这与清空它一样)。
  3. 我搜遍了stackoverflow,但有些答案没有believe that what I'm finding is possible.我感谢任何慷慨的帮助!

3 个答案:

答案 0 :(得分:1)

你所期待的是错误的。

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

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

mysqli_insert_id会返回上一个 AUTO_INCREMENT值 - 如果您在payments_table之后插入另一个表但之前 { {1}}您可能会获得意想不到的价值。

同样,mysqli_insert_id列与数据库表中的行数不对应,但与表的生命周期内的总行数不对应。更准确地说,MySQL维护一个计数器变量,每次创建一个新行时都会递增。

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

AUTO_INCREMENT