У меня есть веб-страница php, которая позволяет пользователю загрузить файл. Я хочу извлечь имя файла из $ _FILE, а затем загрузить все данные в мою базу данных.
Мой код выглядит так:
$myfile = $_FILE['file']['tmp_file']; $executebatchloadsql = 'LOAD DATA LOCAL INFILE "'. $myfile .'" INTO TABLE testtable (fname, lname); mysql_query($executebatchloadsql) or die(mysql_error());
Но сообщение об ошибке, которое я получаю, говорит:
Использованная команда не допускается с этой версией MySQL
Мои вопросы следующие
tmp_file
или имя? ИЗМЕНИТЬ 1:
Это то, что мой /etc/mysql/my.cnf выглядит частично:
[mysqld] user = mysql pid-file = /var/run/mysqld/mysqld.pid socket = /var/run/mysqld/mysqld.sock port = 3306 basedir = /usr datadir = /var/lib/mysql tmpdir = /tmp lc-messages-dir = /usr/share/mysql skip-external-locking local-infile
Последняя строка – это то, что я добавил. Я также добавил ту же строку в раздел [mysql]:
[mysql] local-infile
После внесения этих изменений я перезапустил sql:
/etc/init.d/mysql restart
Но у меня все еще проблема
EDIT 2:
Я также пробовал local-infile = 1 в соответствии с тем же сообщением, о котором я упоминал выше. Но это тоже не работает.
ИЗМЕНИТЬ 3
Я попытался добавить FILE prvil пользователю .. так:
GRANT FILE ON *.* TO root;
а затем, когда я выдаю гранты для root, я вижу, что он был добавлен. но я все еще получаю сообщение об ошибке, что используемая команда не разрешена в моей версии mysql. Нужно ли мне «= 1» после infile в моем файле my.cfg?
EDIT 4:
В качестве дополнительного теста я попытался загрузить файл вручную через командную строку вместо php и принял ее. Я зарегистрировался как root (это тот же идентификатор, который я использую в приложении для тестирования), а затем я попробовал следующую команду:
mysql> load data local infile '/var/www/testwebsite/abc.csv' into table testtable; Query OK, 3 rows affected, 48 warnings (0.00 sec) Records: 3 Deleted: 0 Skipped: 0 Warnings: 48
Но я не могу заставить PHP-код работать. Благодаря.!
Перейдя с MySQL 5.0 на 5.5, я узнал, что мне вдруг нужно включить LOCAL INFILE, когда вы создаете соединение в PHP.
Использование mysql:
mysql_connect(server,user,code,false,128); // 128 enables LOCAL INFILE mysql_select_db(database);
Использование mysqli:
$conn = mysqli_init(); mysqli_options($conn, MYSQLI_OPT_LOCAL_INFILE, true); mysqli_real_connect($conn,server,user,code,database);