mysqli_query возвращает false с кодом ошибки 0, но запрос завершается успешно - PullRequest
3 голосов
/ 13 января 2011

У меня есть огромное количество данных, которые генерируются из скрипта PHP и должны быть вставлены в базу данных.Я пробовал разные решения с разными результатами, но текущее решение (и, на мой взгляд, должно быть лучшим) заключается в том, что я генерирую данные в файл CSV, а затем вставляю их в базу данных с помощью следующего запроса:

LOAD DATA LOCAL INFILE 'myfile.csv' INTO TABLE t1 FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY "'"

Я использую CodeIgniter в качестве фреймворка PHP, и после выполнения запроса он перенаправляется на страницу с ошибкой, на которой только

Произошла ошибка базы данных

Номер ошибки: 0

Нет сообщения об ошибке или чего-либо еще.

Я прошел по коду, но все, что я могу найти, это то, что mysqli_query() возвращает false, а затем mysqli_errno() возвращает 0, а mysqli_error() возвращает пустую строку.

Однако , запрос действительно успешно выполнен, и когда я смотрю в базу данных, я вижу, что все данные из файла CSV были успешно вставлены.Можно ли ожидать такого поведения?Если это так, я думаю, что мне придется немного взломать код CodeIgniter или напрямую вызвать mysqli_query() вместо того, чтобы проходить через фреймворк.

Я также выполнил точно такой же запрос в MySQL Workbench, и я делаютам не появляется сообщение об ошибке.

Ответы [ 2 ]

2 голосов
/ 23 мая 2011

У меня возникла точно такая же проблема, когда я понял, что не подключен к базе данных.

Я звонил require_once('connect.php'), но это был второй раз в коде, который я использовал require_once, поэтому PHP не установил соединение.

Изменение require_once на необходимость исправления этой проблемы для меня.

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

Я никогда не пробовал LOAD INFILE с php раньше, но быстрый гугл придумал функцию mysqli_set_local_infile_handler () . Возможно, примеры / комментарии могут помочь?

Редактировать: Моя теория заключается в том, что запрос ожидает, что число строк возвращает возвращаемое значение, а соединение не возвращает никаких чисел. Таким образом, пока запрос завершается успешно в конце MySQL, PHP ожидает число> 0, но не получает его. Таким образом, он сообщает об ошибке, без сообщения об ошибке.

Infile_handler возвращает количество вставленных строк.

...