我正在尝试使用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);
}
答案 0 :(得分:0)
如果第一个语句失败,mysqli :: multi_query只返回false。要从集合中的其他查询中获取错误,首先需要调用mysqli :: next_result(),这就是你做的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);
}