PHP to LOAD DATA LOCAL INFILE 不起作用
Posted
技术标签:
【中文标题】PHP to LOAD DATA LOCAL INFILE 不起作用【英文标题】:PHP to LOAD DATA LOCAL INFILE does not work 【发布时间】:2018-03-04 04:45:14 【问题描述】:我已经查看了一些以前的帖子以解决完全相同的问题,但仍然无法解决该问题。我认为我的问题可能与其他问题不同。我认为这可能是文件权限问题或与文件或路径的位置有关的问题。也许这是一个 MacOS 沙盒问题?该语句在 mysql Workbench 中运行良好。我在 MacOS 10.12.6 上运行 MySQL 5.7.19。有什么想法???
<?php
$host="localhost";
$port=3306;
$socket="/tmp/mysql.sock";
$user="user";
$password="password";
$dbname="Test_Company";
$con = new mysqli($host, $user, $password, $dbname, $port, $socket)
or die ('Could not connect to the database server' . mysqli_connect_error());
$sql = "LOAD DATA LOCAL INFILE '/Users/Test.User/Desktop/Data/Inventory Data.csv'
INTO TABLE inventory data
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '\"'
IGNORE 1 LINES " ;
if ($stmt = $con->prepare($sql))
$stmt->execute();
$stmt->bind_result($field1, $field2);
while ($stmt->fetch())
//printf("%s, %s\n", $field1, $field2);
$stmt->close();
$con->close();
?>
似乎它应该非常简单直接,但无法弄清楚这一点......
【问题讨论】:
IGNORE 1 LINES
末尾缺少一个";
不幸的是,我只是在我的帖子中忘记了这一点,但它在我试图运行的 PHP 脚本中。还是没有运气...
你能用所有代码更新脚本吗?你的代码中没有任何东西可以执行 SQL。
对不起...这是从 MySQL 实用程序生成的 PHP 代码,所以这是我正在使用的。
$stmt->execute()
是否产生任何错误?默认情况下禁用 Afaik LOAD DATA INFILE
。
【参考方案1】:
Afaik,LOAD DATA INFILE
选项默认未启用。您必须在运行 LOAD DATA INFILE
查询之前启用它:
$con = new mysqli($host, $user, $password, $dbname, $port, $socket)
$con->options(MYSQLI_OPT_LOCAL_INFILE, TRUE);
//
// $stmt = $con->prepare($sql);
// etc...
【讨论】:
在发布我的问题之前,我确实确认 LOAD DATA INFILE 已启用。我继续添加 $con->options(MYSQLI_OPT_LOCAL_INFILE, TRUE);并经过测试,仍然没有数据。此外,PHP 不会产生任何错误。我希望它会,这会有所帮助......$stmt->execute()
是否返回 TRUE
?
嗯...LOAD DATA
可以与prepare()
一起使用吗?尝试直接以$con->query($sql)
运行。
至于$stmt->execute()
是否返回TRUE?
,我不知道该怎么说。我没有收到任何错误。我尝试按照您的建议直接运行$con->query($sql)
,但仍然没有运气。我知道这看起来很疯狂,我看不出它为什么不起作用..
作为补充说明,我还有另一个 PHP 脚本可以清除数据库表。当我通过 MySQL 向表中添加数据然后运行 PHP 脚本以清除数据库时,它可以工作。 PHP 代码完全相同,只是我刚刚替换了 ' $query = "TRUNCATE TABLE Test_Company
.inventory data
"; ` 与LOAD DATA LOCAL INFILE
声明。所以,我应该连接到数据库。这个问题似乎与加载数据有关。这就是为什么我认为它可能与文件路径或权限有关。以上是关于PHP to LOAD DATA LOCAL INFILE 不起作用的主要内容,如果未能解决你的问题,请参考以下文章
php 编译安装插件提示PHP Warning: PHP Startup: Unable to load dynamic library 报错
MySQL:驱动程序从 5 更新到 8 后,LOAD DATA LOCAL INFILE 不起作用
LOAD DATA LOCAL INFILE 给出错误 The used command is not allowed with this MySQL version