gpt4 book ai didi

PHP LOAD DATA INFILE 读取文件时出错

转载 作者:行者123 更新时间:2023-11-30 00:29:48 25 4
gpt4 key购买 nike

已解决

所以,这是一种权限错误。在此脚本的前面,我在文件上使用了flock(),以确保该文件没有被其他脚本写入。删除flock() 允许查询运行。现在我只需要确定一种在文件仍在写入时不加载文件的方法...

<小时/>

我无法在我的 php 脚本中使用 LOAD DATA INFILE。以下是脚本的相关部分:

... //set $host, $user, etc.
$dsn = "mysql:host=$host;dbname=$database";
$pdo = new PDO($dsn, $user, $password, array(PDO::MYSQL_ATTR_LOCAL_INFILE => 1));
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
... //set $sqlFile and $table
$sql = "LOAD DATA INFILE '$sqlFile' REPLACE INTO TABLE `$table`";
echo $sql . "\n";
$rows = $pdo->exec($sql);

运行脚本会产生:

LOAD DATA INFILE 'D:/pathToTemp/emdr/emdrorders/emdrorders_160314-1947UTC.txt'
REPLACE INTO TABLE `emdrorders`
[PDOException]
SQLSTATE[HY000]: General error: 2 Error reading file 'D:\pathToTemp\emdr\emdrorders\emdrorders_160314-1947UTC.txt'
(Errcode: 13 - Permission denied)

但是,如果我通过 mysql cli 运行相同的查询,它就可以工作。

mysql> LOAD DATA INFILE 'D:/pathToTemp/emdr/emdrorders/emdrorders_160314-1947UTC.txt'
REPLACE INTO TABLE `emdrorders`;
Query OK, 5487 rows affected (0.10 sec)
Records: 5355 Deleted: 132 Skipped: 0 Warnings: 0

我也尝试过使用 LOCAL,但 $pdo->exec() 返回 0,而不是抛出异常,并且数据未加载到数据库中。

我的Windows机器上的Mysql是5.6.12,PHP是5.4.16,并计划将其放在Linux服务器上。 (我也在 Laravel 框架内执行此操作,但我认为这不会导致此问题。)

由于查询在 mysql cli 中工作,但不能通过 php,我只能假设问题出在 php 设置或 pdo 中。我需要改变什么?

最佳答案

您打算用 $rows 做什么?

您可以通过 PDO::QUERYPDO::PREPARE 传递查询。

根据 PDOStatement::execute 的使用,我假设您希望使用 PDO::PREPARE

$query = $pdo->prepare($sql); $query->execute();

要从查询中获取响应:$query->fetch()$query->fetchAll()

请参阅有关在 PDO 中准备查询的文档链接:

http://www.php.net/manual/en/pdo.prepare.php

关于PHP LOAD DATA INFILE 读取文件时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22597064/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com