Devi configurare entrambi il client e il server per consentire questo comando:
-
Assicurarsi che il server consenta LOAD DATA LOCAL INFILE. Modifica /etc/my.cnf sul server MySQL:
[server] local-infile=1
-
Imposta l'attributo PDO nel tuo script 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 ','");
Questo deve essere impostato nell'argomento delle opzioni del driver per il costruttore, non in una successiva chiamata a
setAttribute()
.Ho appena testato con successo l'esempio di codice sopra con PHP 5.5.8 e Percona Server 5.6.15 su CentOS Linux 6.5.
Se hai ancora problemi, potresti avere una build del client MySQL o PDO che non consente il local-infile. I requisiti sono descritti in http://dev. mysql.com/doc/refman/5.6/en/load-data-local.html
Il mysql.allow_local_infile
opzione nel tuo php.ini non è rilevante per PDO.