LOAD DATA LOCAL INFILE запрещен в … PHP

Я пытаюсь использовать LOAD DATA INFILE для вставки некоторых записей в таблицу. К сожалению, он не работает.

Вот некоторые подробности

  • SQL-запрос, выберите ближайшие места по заданным координатам
  • Вы указали неверную ошибку подключения к базе данных.
  • phpMyAdmin: изменить количество отображаемых строк по умолчанию?
  • Обновление базы данных MySql с помощью PHP с помощью функции javascript onClick
  • Подключения PHP к MySQL SSL
  • PHP mysql ищет несколько таблиц с помощью ключевого слова
  • Если я использую эту инструкцию:

     LOAD DATA INFILE 'file.txt' INTO TABLE table_ex FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' (field1, field2, field3, field4); 

    Он работает с использованием клиентской программы MySQL и приложения PHP. Таким образом, он будет искать файл в каталоге данных моей установки MySQL.

    Теперь, если я попытаюсь выполнить инструкции, используя параметр LOCAL , он работает только, если я использую клиент mysql, но не из PHP:

     LOAD DATA LOCAL INFILE 'path/to/file/file.txt' INTO TABLE table_ex FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' (field1, field2, field3, field4); 

    Опять же, он работает с клиентом MySQL, но не с PHP-приложением … Я получаю эту ошибку:

     LOAD DATA LOCAL INFILE forbidden in /path/to/my/application 

    Я читал, что проблема связана с компиляцией PHP и использованием mysqlnd. Я использую PHP 5.3.8 и MySQL 5.5.15, но я не нашел решения.

    Дополнительная информация: до сих пор единственной помощью, которую я нашел, была открытая ошибка PHP :

  • Композитор и несколько ветвей
  • Включает () / require () с «побочными эффектами» плохую практику?
  • php проверить, равна ли домену значению, затем выполнить действие
  • php отправлять почту с localhost
  • Как выбрать базу данных MySQL для использования с PDO в PHP?
  • Отображение pdf-файла из arraybuffer
  • 8 Solutions collect form web for “LOAD DATA LOCAL INFILE запрещен в … PHP”

    Проверьте документы http://php.net/manual/en/ref.pdo-mysql.php .

    В основном вам нужно:

     PDO::MYSQL_ATTR_LOCAL_INFILE => true 

    Может быть установлен в экземпляре или через prepare ().

    Легче работать с exec ()

     exec("mysql -u myuser -pMyPass -e \"USE mydb;TRUNCATE mytable;LOAD DATA INFILE '" . $file . "' IGNORE INTO TABLE mytable;\"; "); 

    Согласно руководству MySQL MySQL должен быть скомпилирован с --enable-local-infile . Из комментария по этой ссылке:

    Вы ДОЛЖНЫ компилировать PHP, используя полный путь к MySQL, иначе он будет использовать внутренние обработчики, которые не работают с «новыми» LOAD DATA.

    –with-mysql = / usr / local / mysql (предполагается, что ваш MySQL находится здесь)

    Вы ДОЛЖНЫ запустить демон MySQL с опцией '–local-infile = 1'

    Я не получил точную ошибку, которую вы получили, но вам не нужно гарантировать следующее:

    Включить, добавив в my.cnf:

     [mysql] local-infile=1 [mysqld] local-infile=1 

    Скажите подключению на PHP, что он может использовать LOCAL INFILE

    Использование 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); 

    Дать разрешение пользователя FILE MySQL

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

     GRANT FILE ON *.* TO 'mysql_user'@'localhost' 

    Самое простое решение, которое может работать на некоторых серверах, – это удалить LOCAL, например:

    Оригинал: LOAD DATA LOCAL INFILE Новое / Это должно быть: LOAD DATA INFILE

    Странно, но я нашел это решение для работы на моей локальной машине с помощью xampp, но он не работал на реальном сервере с CentOS, поэтому я должен вернуть код обратно и добавить «LOCAL».

    Если вы используете сервер Ubuntu, вы можете попробовать установить php5-mysqlnd :

    sudo apt-get install php5-mysqlnd

    У меня была точно такая же проблема на экземпляре EC2 Ubuntu 12.04 LTS при доступе к MySQL на RDS: LOAD DATA LOCAL INFILE... отлично работает на консоли mysql, но не с PHP. Случайно я узнал, что он отлично работал на другой почти идентичной машине, которая использовала MariaDB (двоичное совместимое падение в замене MySQL).

    Таким образом, я заменил клиентов MySQL теми, что были у MariaDB, и это сработало.

    LOAD DATA LOCAL INFILE выполняет независимо от предупреждений. он работает с клиентом mysql, поскольку он позволяет выполнять запросы, игнорируя предупреждения. Хотя позже он выдает предупреждения. Он отказывается от PHP, потому что предупреждение остановит скрипт.

    PHP is the Best Programming Language in the world.