Du måste konfigurera båda klienten och servern för att tillåta detta kommando:
-
Se till att servern tillåter LOAD DATA LOCAL INFILE. Redigera /etc/my.cnf på MySQL-servern:
[server] local-infile=1
-
Ställ in PDO-attributet i ditt PHP-skript:
<?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 ','");
Detta måste ställas in i drivrutinsalternativargumentet till konstruktorn, inte i ett efterföljande anrop till
setAttribute()
.Jag testade precis ovanstående kodexempel framgångsrikt med PHP 5.5.8 och Percona Server 5.6.15 på CentOS Linux 6.5.
Om du fortfarande har problem kan du ha en build av MySQL-klienten eller PDO som inte tillåter lokal infil. Kraven beskrivs i http://dev. mysql.com/doc/refman/5.6/en/load-data-local.html
mysql.allow_local_infile
alternativet i din php.ini är inte relevant för PDO.