2011-01-13 4 views
3

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

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, и я не получаю сообщение об ошибке там.

+1

Пожалуйста, показать код, который вы используете для запуска запроса. –

+1

Это код $ this-> db-> query ($ query); – Johan

+1

нет, я имею в виду полный код, включая часть, в которой вы выводите сообщение об ошибке. Вы можете отредактировать его в вопросе * Edit *: Ах, я вижу, вы используете CodeIgniter, что, вероятно, делает вещи немного сложнее. Тем не менее, попробуйте опубликовать то, что вы можете –

ответ

0

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

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

Устройство infile_handler вернет количество вставленных строк.

+0

Я сделал быстрый тест, но после вызова mysqli_set_local_infile_handler() скрипт просто умирает. Возможно, я что-то пропустил – Johan

1

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

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

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

Смежные вопросы