首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为mysqli_insert_id()返回的预期ID与实际ID不同

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

Stack Overflow用户
提问于 2013-02-11 06:10:41
回答 3查看 354关注 0票数 0

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

代码语言:javascript
运行
复制
$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 is 3”。但是,在执行此代码后,它将响应以下内容:“当前payerID为21”

几个人注意到:

  1. 这个'payments_table‘表有一个名为"payer_id“的列,它是一个主键,具有AUTO_INCREMENT属性。
  2. 我“截断”了这张桌子(我相信这和倒空它是一样的)。

我搜索了堆叠溢出,但有些答案不believe that what I'm finding is possible.我很感激任何慷慨的帮助!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-02-11 07:16:20

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

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

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

代码语言:javascript
运行
复制
SELECT AUTO_INCREMENT FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'my_database_name' AND TABLE_NAME = 'my_table_name';
票数 0
EN

Stack Overflow用户

发布于 2013-02-11 06:41:30

你所期待的是错误的。

有了一个使用自动增量的字段,您就可以插入数据,并通过每次插入递增一个主键来生成唯一的主键。

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

票数 1
EN

Stack Overflow用户

发布于 2013-02-11 06:13:48

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14806803

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档