Я получаю сообщение об ошибке «Неотключенное исключение Предупреждение: Пакеты вышли из строя. Ожидаемое 1 получено 166. Размер пакета = 52« при запуске двух запросов PDO один за другим.Pdo Mysql: Предупреждение: Пакеты не по порядку
$dbh = new \PDO('mysql:host=' . $dbHost . ';dbname=' . $dbName, $dbUser, $dbPass, array(
\PDO::MYSQL_ATTR_LOCAL_INFILE => true
));
$sql = <<<eof
LOAD DATA LOCAL INFILE '$csv'
INTO TABLE $table
FIELDS TERMINATED BY ';' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 LINES
($columns);
ALTER TABLE $table ADD COLUMN disabled INT DEFAULT 0
eof;
$dbh->query($sql);
$sql = 'SELECT COUNT(id) FROM '.$table.' WHERE myfield IS NULL';
$dbh->query($sql);
То, что я пытаюсь сделать: после импорта больших CSV-файла (около 30 МБ и 40k строк) в базу данных, я хочу, чтобы подсчитать, сколько строк пусты в поле, чтобы заполнить их в более поздний запрос.
Я заметил, что могу запустить первый запрос, если я прокомментирую второй, а затем я могу запустить второй запрос, если я прокомментирую первый. Если я пытаюсь запустить их один за другим, это терпит неудачу. Я попытался собрать пакет памяти до 20M с 8M, а также установить $ dbh-> setAttribute (\ PDO :: ATTR_EMULATE_PREPARES, true); без успеха. Аналогичный код работал с меньшим набором данных ранее. Любые указатели очень приветствуются!
* * Я сомневаюсь, что это не имеет ничего общего с вашим сообщением об ошибке, но вам не нужно знать, «сколько строк пуст в поле», чтобы обновить их позже. –
Возможно, вы правы. Хотя в этой конкретной ситуации полезно знать число для обновления цикла цикла. (обновление может быть несколько тысяч). – user789102014
Вы, вероятно, должны обращаться с предложениями WHERE, а не с циклом. –