Necesitas configurar ambos el cliente y el servidor para permitir este comando:
-
Asegúrese de que el servidor permita LOAD DATA LOCAL INFILE. Edite /etc/my.cnf en el servidor MySQL:
[server] local-infile=1
-
Establezca el atributo PDO en su secuencia de comandos 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 ','");
Esto debe configurarse en el argumento de opciones del controlador para el constructor, no en una llamada posterior a
setAttribute()
.Acabo de probar con éxito el ejemplo de código anterior con PHP 5.5.8 y Percona Server 5.6.15 en CentOS Linux 6.5.
Si aún tiene problemas, es posible que tenga una compilación del cliente MySQL o PDO que no permita la entrada local. Los requisitos se describen en http://dev. mysql.com/doc/refman/5.6/en/load-data-local.html
El mysql.allow_local_infile
La opción en su php.ini no es relevante para PDO.