Трябва да конфигурирате и двете клиентът и сървърът да разрешат тази команда:
-
Уверете се, че сървърът позволява LOAD DATA LOCAL INFILE. Редактирайте /etc/my.cnf на MySQL сървъра:
[server] local-infile=1
-
Задайте PDO атрибута във вашия PHP скрипт:
<?php $dsn = "mysql:host=localhost;dbname=test"; $user = "root"; $password = "root"; $pdo = new PDO($dsn, $user, $password, array(PDO::MYSQL_ATTR_LOCAL_INFILE=>1)); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $pdo->exec("LOAD DATA LOCAL INFILE 'foo.csv' INTO TABLE foo FIELDS TERMINATED BY ','");
Това трябва да бъде зададено в аргумента за опции на драйвера към конструктора, а не в последващо извикване на
setAttribute()
.Току-що тествах горния пример с код успешно с PHP 5.5.8 и Percona Server 5.6.15 на CentOS Linux 6.5.
Ако все още имате проблеми, може да имате компилация на MySQL клиента или PDO, която не позволява локален файл. Изискванията са описани в http://dev. mysql.com/doc/refman/5.6/en/load-data-local.html
mysql.allow_local_infile
опцията във вашия php.ini не е от значение за PDO.