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

标签 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);
}

最佳答案

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);
}

关于php - 为什么 mysqli::multi_query 在一定数量的行后停止?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4761227/

相关文章:

php - CN_match 已弃用,取而代之的是 peer_name

PHP 自动完成功能不起作用

php - Mysql,一对多关系,需要最新的

.htaccess - 防止目录访问

javascript - jquery ajax - 使用复选框更新不起作用

javascript - jQuery 获取子元素的属性

mysql - 如何在一行中存储多个id?

mysql - 需要优化查询

php - 合并 MySQl 行作为结果,其中数据是最新的

php - 通过YouTube API返回 channel yield