2013-02-11 68 views
0

不同我想不通,爲什麼ID與mysqli_insert_id()返回比我預期的ID不同。這裏是我的代碼:預計ID返回mysqli_insert_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」。但是,在執行此代碼後,它呼應了以下內容: 「當前payerID是21」

一對夫婦的注意事項:

  1. 這種「payments_table」表已經是一個 主名爲「payer_id」列鍵並具有AUTO_INCREMENT屬性。
  2. 我已經「截斷」這個表(我相信這是一樣的排空出來)。

我在整個stackoverflow搜索,但一些答案不believe that what I'm finding is possible.我感謝任何慷慨的幫助!

+0

檢查什麼是最後生成的ID。 – 2013-02-11 06:16:40

+0

21後,在下一步插入它返回的是什麼?並請看你的數據庫表。什麼是存儲在你的DB?請告訴。 – ripa 2013-02-11 06:22:38

+0

嗨@YogeshSuthar,謝謝你的回答。生成的最後一個ID是「3」。 – 2013-02-11 06:23:05

回答

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'; 
0

mysqli_insert_id函數返回在具有AUTO_INCREMENT屬性的列的表上的查詢生成的ID。如果最後一個查詢是不是INSERTUPDATE陳述或者,修飾的表沒有與AUTO_INCREMENT屬性的列,該函數將返回零。

這可能是你有截斷和最後一個編號爲20,然後把它給你21.現在嘗試一次。

+0

謝謝你回答我的問題,user2001117。我相信我瞭解你的建議。但是,我相信我的最後一個查詢顯然是INSERT語句。正如我上面提到的,該函數返回「21」而不是預期的「3」。 – 2013-02-11 06:17:35

1

什麼你期望是錯誤的。

使用自動增量有一個字段,可以插入數據並通過一個與每個插入遞增它生成一個唯一的主鍵。

這意味着什麼,你的是,返回給你的是獨創UD,而不是在你的表插入的行數。

相關問題