【问题标题】:Importing CSV file to mysql table using "LOAD DATA" command使用“LOAD DATA”命令将 CSV 文件导入 mysql 表
【发布时间】:2014-03-26 06:56:28
【问题描述】:

我正在运行一台用于本地开发的 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]: LOAD DATA LOCAL INFILE 禁止在...”

我已寻找答案,但未能解决问题。 但是当我将数据库与本地 m/c 中的本地数据库连接时(即带有 root 的本地主机),它运行良好

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

【问题讨论】:

  • 您使用的是相对路径还是绝对路径?尝试绝对
  • 我使用绝对路径

标签: php mysql database load-data-infile


【解决方案1】:
  1. 确保服务器允许 LOAD DATA LOCAL INFILE

    [server]local-infile=1

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

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

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

【讨论】:

  • 哇……它真的对我有用。非常感谢@akhil.cs。
【解决方案2】:

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

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

【讨论】:

  • 请注意,将 CSV 数据转换为一系列VALUES 兼容(和properly escaped)插入与打开橱柜门一样困难。这就是 mysql 命令行工具在使用 LOAD DATA LOCAL INFILE 时将数据从本地计算机传送到远程计算机所做的事情
猜你喜欢
  • 1970-01-01
  • 2011-05-28
  • 2013-09-25
  • 2023-02-14
  • 1970-01-01
  • 2013-05-03
  • 1970-01-01
  • 2021-10-02
相关资源
最近更新 更多