使用“LOAD DATA”命令将CSV文件导入mysql表

时间:2014-02-24 14:33:04

标签: php mysql database load-data-infile

我正在运行一台用于本地开发的Windows机器,并尝试将大型csv文件加载到mysql中。我的代码如下所示:

$sql_query = 'LOAD DATA LOCAL 
    INFILE "' . $tempLoc . '"
    INTO TABLE users
    FIELDS
    TERMINATED BY " "
    ENCLOSED BY "\'"
    LINES
    TERMINATED BY "\\n"                                
    (
     id,
     name,
     value 
    )';

$statement = $this->adapter->query($sql_query);
$resultSet = $statement->execute();
$this->adapter->getDriver()->getConnection()->commit();

当我加载文件时出现此错误: -

“PDOStatement :: execute()[pdostatement.execute]:在...中禁止加载数据本地INFILE”

我已经找到了答案,但我无法解决问题。 但是当我在我的本地m / c中连接数据库与本地数据库(即带有root的localhost)时,它运行良好

  • 我的应用程序在本地计算机
  • 数据库已连接到另一台服务器

2 个答案:

答案 0 :(得分:3)

  1. 确保服务器允许LOAD DATA LOCAL INFILE

    [server]local-infile=1

  2. 确保您的MySQL用户具有“FILE”权限

  3. 在PHP脚本中设置PDO属性

    $pdo = new PDO($dsn, $username, $password, array(PDO::MYSQL_ATTR_LOCAL_INFILE=>1))

答案 1 :(得分:1)

当您使用LOAD DATA LOCAL时,您告诉MySQL服务器进程在其自己的文件系统上打开本地文件并读取它。大多数MySQL操作使用客户端和MySQL服务器之间的TCP / IP连接来发送和接收所有数据。但这种行动是不同的。

如果您的客户端代码在一台计算机上运行而服务器在另一台计算机上运行,​​则除非他们共享文件系统,否则这将无效。提示:如果您使用的是每月5美元托管服务中的一个,这可能不起作用。