sql >> Databáze >  >> RDS >> Mysql

LOAD DATA LOCAL INFILE nefunguje od php 5.5 pomocí PDO

Musíte nakonfigurovat obě klient a server povolí tento příkaz:

  1. Ujistěte se, že server umožňuje LOAD DATA LOCAL INFILE. Upravte /etc/my.cnf na serveru MySQL:

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



  1. Jak přidat komentáře do tabulky v Oracle SQL Developer?

  2. Implementace a návrh architektury pro systém oznámení pomocí socket.io node.js a příchozích zpráv

  3. PHP a MySQL volitelné podmínky WHERE

  4. Přidání sloupce uniqueidentifier a přidání výchozího nastavení pro vygenerování nového guid