Mysql
 sql >> Database >  >> RDS >> Mysql

LOAD DATA LOCAL INFILE non funziona da php 5.5 usando PDO

Devi configurare entrambi il client e il server per consentire questo comando:

  1. Assicurarsi che il server consenta LOAD DATA LOCAL INFILE. Modifica /etc/my.cnf sul server MySQL:

    [server]
    local-infile=1
    
  2. 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.