我不知道为什么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 is 3”。但是,在执行此代码后,它将响应以下内容:“当前payerID为21”
几个人注意到:
我搜索了堆叠溢出,但有些答案不believe that what I'm finding is possible.我很感激任何慷慨的帮助!
发布于 2013-02-10 23:16:20
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-10 22:41:30
你所期待的是错误的。
有了一个使用自动增量的字段,您就可以插入数据,并通过每次插入递增一个主键来生成唯一的主键。
这对您来说意味着,返回给您的是一个唯一创建的UD,而不是表中插入的行数。
发布于 2013-02-10 22:13:48
mysqli_insert_id
函数返回由具有AUTO_INCREMENT
属性的列的表上的查询生成的ID
。如果最后一个查询不是INSERT
或UPDATE
语句,或者修改后的表没有带有AUTO_INCREMENT
属性的列,则此函数将返回零。
这可能是你有截断,最后id是20,然后它给你21。现在试一次。
https://stackoverflow.com/questions/14806803
复制