Musíte nakonfigurovat obě klient a server povolí tento příkaz:
-
Ujistěte se, že server umožňuje LOAD DATA LOCAL INFILE. Upravte /etc/my.cnf na serveru MySQL:
[server] local-infile=1
-
Nastavte atribut PDO ve skriptu 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 ','");
Toto je třeba nastavit v argumentu možností ovladače konstruktoru, nikoli v následném volání
setAttribute()
.Právě jsem výše uvedený příklad kódu úspěšně otestoval s PHP 5.5.8 a Percona Server 5.6.15 na CentOS Linux 6.5.
Pokud potíže přetrvávají, je možné, že máte sestavení klienta MySQL nebo PDO, které nepovoluje local-infile. Požadavky jsou popsány v http://dev. mysql.com/doc/refman/5.6/en/load-data-local.html
mysql.allow_local_infile
volba ve vašem php.ini není pro PDO relevantní.