我有一个 php 网页,可以让我们上传文件。我想从 $_FILE 中提取文件名,然后将所有数据加载到我的数据库中。
我的代码如下所示:
$myfile = $_FILE['file']['tmp_file'];
$executebatchloadsql = 'LOAD DATA LOCAL INFILE "'. $myfile .'" INTO TABLE testtable (fname, lname);
mysql_query($executebatchloadsql) or die(mysql_error());
但是我收到的错误消息说:
此 MySQL 版本不允许使用的命令
我的问题如下
- 我应该使用
tmp_file
名称还是名称? - 我需要做什么才能使加载数据命令起作用?我试图关注在MySQL 上找到的帖子:启用 LOAD DATA LOCAL INFILE但它仍然给我同样的错误。
编辑1:
这就是我的 /etc/mysql/my.cnf 部分的样子:
[mysqld]
user = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
lc-messages-dir = /usr/share/mysql
skip-external-locking
local-infile
最后一行是我添加的。我还在 [mysql] 部分添加了同一行:
[mysql]
local-infile
进行这些更改后,我重新启动了 sql:
/etc/init.d/mysql restart
但我仍然有问题
编辑2:
根据我上面提到的同一篇文章,我也尝试了 local-infile=1 。但这也行不通。
编辑 3
我试图将 FILE prvil 添加到用户.. 像这样:
GRANT FILE ON *.* TO root;
然后当我显示它授予 root 权限时,我可以看到它已被添加。但我仍然收到一条错误消息,指出我的 mysql 版本不允许使用的命令。我的 my.cfg 文件中的 infile 之后是否需要“=1”?
编辑4:
作为进一步的测试,我尝试通过命令行而不是通过 php 手动加载文件,它接受了它。我以 root 身份登录(这与我使用我的应用程序进行测试的 id 相同),然后我尝试了以下命令:
mysql> load data local infile '/var/www/testwebsite/abc.csv' into table testtable;
Query OK, 3 rows affected, 48 warnings (0.00 sec)
Records: 3 Deleted: 0 Skipped: 0 Warnings: 48
但我似乎无法让 PHP 代码正常工作。谢谢。!