0

我有一个 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 版本不允许使用的命令

我的问题如下

  1. 我应该使用tmp_file名称还是名称?
  2. 我需要做什么才能使加载数据命令起作用?我试图关注在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 代码正常工作。谢谢。!

4

1 回答 1

2

从 MySQL 5.0 升级到 5.5 后,我发现我突然必须在 PHP 中创建连接时专门启用 LOCAL INFILE。

使用 mysql:

mysql_connect(server,user,code,false,128); // 128 enables LOCAL INFILE
mysql_select_db(database);

使用 mysqli:

$conn = mysqli_init();
mysqli_options($conn, MYSQLI_OPT_LOCAL_INFILE, true);
mysqli_real_connect($conn,server,user,code,database);
于 2013-05-22T12:30:40.823 回答