2013-08-22 77 views
3

如何在CodeIgniter中使用批量插入獲取最後插入的查詢的ID。我使用代碼$this->db->insert_id(),但它返回我的第一個插入數組的ID。我無法得到最後一個插入。在CodeIgniter中使用批量插入獲取查詢的最後一個插入ID時出錯

這裏就是我所做的:

for ($x = 0; $x < sizeof($filtername); $x++) { 
    $orders[] = array(
     'poid'    => null, 
     'order_id'   => $poid, 
     'item_desc'   => $filtername[$x], 
     'item_qty'   => $filterquantity[$x], 
     'item_price'  => $filterprice[$x], 
     'total'    => $filtertotal[$x], 
     'cash_on_delivery' => $val_delivery, 
     'is_check'   => $val_check, 
     'bank_transfer'  => $val_transfer, 
     'transaction_date' => $dateorder 
    ); 
} 

$this->db->insert_batch('po_order', $orders); 
echo $this->db->insert_id(); //will return the first insert array 

我看不出哪裏是我的錯誤。我最後的選擇是使用查詢來獲取它。我還做了mysql_insert_id()但始終返回到0

+0

http://stackoverflow.com/questions/1440360/lastinsertid-from-a-bulk-insert –

+2

http://stackoverflow.com/questions/15919289/how-to-retrieve-all-last-插入的行ids-in-mysql-php –

+0

添加插入記錄的數量到返回的第一個id將有所幫助,除非你沒有做smthg奇怪的事情(比如你沒有刪除數據庫中的以前的記錄)。因爲insert_batch不會給你最後一個插入ID。 –

回答

3

你需要做這樣的事情,

$insertIds = array(); 
for ($x = 0; $x < sizeof($filtername); $x++) { 
    $orders = array(
     'poid'    => null, 
     'order_id'   => $poid, 
     'item_desc'   => $filtername[$x], 
     'item_qty'   => $filterquantity[$x], 
     'item_price'  => $filterprice[$x], 
     'total'    => $filtertotal[$x], 
     'cash_on_delivery' => $val_delivery, 
     'is_check'   => $val_check, 
     'bank_transfer'  => $val_transfer, 
     'transaction_date' => $dateorder 
    ); 
    $this->db->insert('po_order', $orders); 
    $insertIds[$x] = $this->db->insert_id(); //will return the first insert array 
} 
print_r($insertIds); //print all insert ids 
+0

感謝您的幫助它的工作 – Jerielle

4

我認爲最好的辦法是使用批量插入的,而不是單獨的刀片在爲一個循環性能,但要獲取最後一個插入ID,請添加第一個插入ID &受影響的行。

$this->db->insert_batch('po_order', $orders); 
$total_affected_rows = $this->db->affected_rows(); 
$first_insert_id = $this->db->insert_id(); 

$last_id = ($first_insert_id + $total_affected_rows - 1); 
+1

這種技術是非常簡單的更快; –