Как я могу получить последний вставленный идентификатор запроса, используя пакетную вставку в CodeIgniter. Я использовал код $this->db->insert_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.
Вам нужно будет сделать что-то подобное,
$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
Я думаю, что лучшим способом было бы использовать пакетную вставку вместо отдельных вставок в цикле для производительности, но чтобы получить последний идентификатор вставки, добавьте первый идентификатор вставки и затронутые строки.
$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);