Anda perlu mengonfigurasi keduanya klien dan server untuk mengizinkan perintah ini:
-
Pastikan server mengizinkan LOAD DATA LOCAL INFILE. Edit /etc/my.cnf di server MySQL:
[server] local-infile=1
-
Setel atribut PDO dalam skrip PHP Anda:
<?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 ','");
Ini perlu diatur dalam argumen opsi driver ke konstruktor, bukan dalam panggilan berikutnya ke
setAttribute()
.Saya baru saja menguji contoh kode di atas dengan sukses dengan PHP 5.5.8 dan Percona Server 5.6.15 di CentOS Linux 6.5.
Jika Anda masih mengalami masalah, Anda mungkin memiliki klien MySQL atau PDO yang tidak mengizinkan file-lokal. Persyaratan dijelaskan dalam http://dev. mysql.com/doc/refman/5.6/en/load-data-local.html
mysql.allow_local_infile
opsi di php.ini Anda tidak relevan dengan PDO.