【发布时间】:2019-09-18 05:00:51
【问题描述】:
尝试将 csv 文件上传到服务器时,数据库没有任何反应。错误日志文件显示一条警告,指出:禁止加载数据本地 infile。
相同的代码在 windows 和 ubuntu 中完美运行在 localhost。但是,在服务器 (ubunutu) 上,事情无法正常工作。我们在命令行上执行与 php 中相同的 sql 语句,它会在数据库中填充数据,但是在 phpmyadmin 中执行它时会给出空结果。 我们尝试了在互联网上找到的关于这个问题的大多数解决方案,但没有任何效果:我们将 local-infile 设置为 true,我们将 FILE 授予用户,我们将权限设置为 777,等等。
sql语句如下:
...
$sql = "LOAD DATA LOCAL INFILE 'path\to\file.csv' REPLACE INTO TABLE tablename FIELDS TERMINATED BY ';' ENCLOSED '\"' LINES TERMINATED BY '\\r\\n'";
$result = mysqli_query($con, $sql);
MySQL 版本: 5.0.12
【问题讨论】:
-
文件名需要用单引号括起来,而不是引号,并且有完整的文件路径。
-
你用的是什么版本的 MySQL
-
注意:object-oriented interface to
mysqli明显不那么冗长,使代码更易于阅读和审核,并且不容易与过时的mysql_query接口混淆,因为缺少单个i会导致麻烦。示例:$db = new mysqli(…)和$db->prepare("…")程序接口很大程度上是 PHP 4 时代引入mysqliAPI 时的产物,不应在新代码中使用。 -
路径应该有正则引号,而不是反引号。反引号是为 SQL 实体(如列或表名)保留的。您还可以通过在字符串中使用单引号和在字符串中使用双引号来避免双反斜杠。
-
其实文件名是用单引号括起来的。我只是在这里犯了这个错字。我使用 MySQL 5.0.12
标签: php mysql mysqli file-upload