gpt4 book ai didi

php - 在 PHP 中使用 mysql LOAD 语句失败,但通过命令行执行此操作可以

转载 作者:行者123 更新时间:2023-11-29 14:05:56 27 4
gpt4 key购买 nike

我有一个 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());

但是我收到的错误消息显示:

The used command is not allowed with this MySQL version

我的问题如下

  1. 我应该使用 tmp_file 名称还是名称?
  2. 我需要做什么才能让加载数据命令发挥作用?我尝试关注 MySQL: Enable 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 代码工作。谢谢。!

最佳答案

从 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);

关于php - 在 PHP 中使用 mysql LOAD 语句失败,但通过命令行执行此操作可以,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14348257/

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