为什么mysqli :: multi_query在一定数量的行之后会停止?

Eri*_*rik 5 php mysql codeigniter mysqli-multi-query

我试图使用multi_query在表上运行相当大量的更新/插入.总共有大约14,000个查询,但该函数只执行~480,然后它会停止而没有错误,并且PHP继续执行以下剪辑之外的脚本:

if($this->db->conn_id->multi_query($sql)){
    do{
        // echo $line.' '.mysqli_sqlstate($this->db->conn_id).'<br>';
    }while($this->db->conn_id->more_results() && $this->db->conn_id->next_result());
    $this->message->set('Import complete.','success',TRUE);
}else{
    $this->message->set('Import could not be completed. '.mysqli_error($this->db->conn_id),'error',TRUE);
}
Run Code Online (Sandbox Code Playgroud)

小智 0

如果第一个语句失败,mysqli::multi_query 仅返回 false。要从集合中的其他查询中获取错误,您需要首先调用 mysqli::next_result(),这就是您的 do while() 所做的事情。

但是,由于 mysqli::next_result() 在失败时返回 false,因此它将导致循环结束并显示“导入完成”消息。您可能需要在设置成功消息之前检查是否有错误,并且只有当错误为空时才返回成功。

如果语句后面有错误,下面的内容至少应该向您显示错误。

if($this->db->conn_id->multi_query($sql)){
    do{
        // echo $line.' '.mysqli_sqlstate($this->db->conn_id).'<br>';
    } while($this->db->conn_id->more_results() && $this->db->conn_id->next_result());

    if ($error = mysqli_error($this->db->conn_id)) {
        $this->message->set('Import could not be completed. ' . $error,'error',TRUE);
    } else $this->message->set('Import complete.','success',TRUE);
} else {
    $this->message->set('Import could not be completed. '.mysqli_error($this->db->conn_id),'error',TRUE);
}
Run Code Online (Sandbox Code Playgroud)