Php 在CodeIgniter中使用批插入获取查询的最后插入ID时出错

Php 在CodeIgniter中使用批插入获取查询的最后插入ID时出错,php,mysql,codeigniter,Php,Mysql,Codeigniter,如何使用CodeIgniter中的批插入获取查询的最后一个插入ID。我使用了代码$this->db->insert_id(),但它返回了我插入的第一个数组的id。我找不到最后一个插页 以下是我所做的: for ($x = 0; $x < sizeof($filtername); $x++) { $orders[] = array( 'poid' => null, 'order_id' => $p

如何使用CodeIgniter中的批插入获取查询的最后一个插入ID。我使用了代码
$this->db->insert_id()
,但它返回了我插入的第一个数组的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
($x=0;$x{ $orders[]=数组( 'poid'=>null, “订单id”=>poid美元, 'item_desc'=>$filtername[$x], “物料数量”=>$filterquantity[$x], “商品价格”=>$filterprice[$x], “总计”=>$filtertotal[$x], “货到付款”=>val交货, 'is_check'=>$val_check, “银行转账”=>$val\U转账, “交易日”=>$dateorder ); } $this->db->insert_batch('po_order',$orders); echo$this->db->insert_id()//将返回第一个插入数组
我看不出我的错误在哪里。我的最后一个选择是使用查询获取它。我也做了
mysql\u insert\u 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
$insertIds=array();
对于($x=0;$xnull,
“订单id”=>poid美元,
'item_desc'=>$filtername[$x],
“物料数量”=>$filterquantity[$x],
“商品价格”=>$filterprice[$x],
“总计”=>$filtertotal[$x],
“货到付款”=>val交货,
'is_check'=>$val_check,
“银行转账”=>$val\U转账,
“交易日”=>$dateorder
);
$this->db->insert('po_order',$orders);
$insertIds[$x]=$this->db->insert_id();//将返回第一个插入数组
}
打印($insertIds)//打印所有插入ID

为了提高性能,我认为最好的方法是在循环中使用批插入而不是单个插入,但要获得最后一个插入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);

将您插入的记录数添加到返回的第一个id将有所帮助,除非您没有执行smthg strange(就像您没有删除数据库中以前的记录一样)。因为insert\U批不会给您最后一个insert id。希望这有帮助。。。。。这项技术非常简单和快速;2019年,仍然有用。谢谢兄弟!