Используемая команда не разрешена с этой версией MySQL

Хорошо, поэтому после недели попыток найти ответы на разные идеи, которые я нашел безуспешно, я собираюсь спросить. Это для LOAD DATA LOCAL INFILE, для MySQL. Было много сообщений об этом, но я все еще не могу заставить его работать из веб-браузера, но я могу запустить его из командной строки mysql на сервере с тем же пользователем и пропустить соединение с той же базой данных. Что я пробовал до сих пор

  1. MySQL версия 5.5
  2. Ubuntu 12.04
  3. Версия PHP 5.3

В my.cnf
local-infile=1
в mysqld, mysql, mysql-safe
loose-local-infile=1 клиент

Перезапущенный MySQL Server. В этот момент я смог запустить запрос из командной строки, а раньше этого не делал.
Я дал каталог, в котором файлы извлекаются из доступа 777.
Я подтвердил, что в php.ini включен локальный параметр файла.
Я обновил apparmor.
Актуальный запрос:

LOAD DATA LOCAL INFILE '/var/www/ui/uploads/r_import.csv' INTO TABLE r_data FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n' IGNORE 1 ROWS (first_name,last_name,apt,user_id)

Вышеупомянутый запрос работает из команды mysql без специальных аргументов при подключении к серверу.

Если у кого-то есть идеи по этому поводу, я был бы рад попробовать что-нибудь ….
Заранее спасибо.

<?php
include 'includes/header.php';
if($_FILES['file']['type'] != "application/vnd.ms-excel"){
die("This is not a CSV file.");
}
elseif(is_uploaded_file($_FILES['file']['tmp_name'])){
$filename = $_FILES['file']['tmp_name'];
$name = $_FILES['file']['name'];
copy( $filename, 'uploads/'.$name ) or die( "Could not copy file!");
$file_to_import = '/var/www/ui/uploads/'.$name;
$query = 'LOAD DATA LOCAL INFILE  \''.$file_to_import.'\' INTO TABLE r_data FIELDS TERMINATED BY  \',\' ENCLOSED BY  \'"\' LINES TERMINATED BY  \'\n\' IGNORE 1 ROWS (first_name,last_name,apt,user_id)';
echo $query;
$result = mysqli_query($link,$query) or die(mysqli_error($link));
}
else{
die("You shouldn't be here");
}
?>

0

Решение

$link = mysqli_init();
mysqli_options($link, MYSQLI_OPT_LOCAL_INFILE, true);
mysqli_real_connect($link, 'localhost', $username, $password, $database);

Строка подключения к базе данных — это то, что сработало для меня. Я нашел это в последнем комментарии в ссылке, предоставленной developerwjk

1

Другие решения

Ваша проблема заключается в использовании LOCAL ключевое слово. Когда вы используете LOCAL сервер ожидает, что клиент MySQL прочитает файл и отправит его. Это применимо, когда клиентское программное обеспечение работает на удаленном компьютере или когда вы запускаете клиент MySQL на самом сервере. (Вот почему вы можете выполнить свой запрос из командной строки сервера).

Если вы используете PHP, клиентское программное обеспечение не используется. PHP делает звонки прямо на сервер, поэтому LOCAL ключевое слово недопустимо в этом контексте.

Использовать LOAD DATA INFILE из PHP вы должны убедиться, что файл находится в месте в файловой системе сервера что сервер MySQL имеет доступ для чтения, и что полный путь к этому файлу передается как часть вашего запроса. Не используйте LOCAL ключевое слово.

Если вы пытаетесь загрузить файл с удаленного клиента, вам сначала нужно загрузить его в файловую систему, а затем выполнить запрос.

Обратите внимание на это предложение из руководства MySQL: Если указан LOCAL, файл читается клиентской программой на клиентском хосте и отправляется на сервер.

Ссылка: http://dev.mysql.com/doc/refman/5.5/en/load-data.html

0

По вопросам рекламы [email protected]