Почему mysqli :: multi_query останавливается после определенного количества строк? - PullRequest
5 голосов
/ 21 января 2011

Я пытаюсь запустить довольно большое количество обновлений / вставок в таблицу, используя 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);
}

1 Ответ

0 голосов
/ 25 января 2011

mysqli :: multi_query возвращает false только в случае неудачного выполнения первого оператора.Чтобы получить ошибки из других запросов в вашем наборе, вам нужно сначала вызвать mysqli :: next_result (), что и делает ваш while ().

Однако, поскольку mysqli :: next_result ()возвращает false при ошибке, это приведет к завершению цикла и появлению сообщения «Импорт завершен».Возможно, вам нужно проверить наличие ошибки перед установкой сообщения об успешном завершении, и только если ошибка пустая, вернуть сообщение об успехе.

Следующее должно как минимум показывать вам ошибку, если она была обнаружена позже в операторе.1005 *

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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...