我正在运行一台用于本地开发的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)时,它运行良好
答案 0 :(得分:3)
确保服务器允许LOAD DATA LOCAL INFILE
[server]local-infile=1
确保您的MySQL用户具有“FILE”权限
在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美元托管服务中的一个,这可能不起作用。