自mysql升级(当前版本:服务器版本:5.5.44-0 + deb8u1(Debian))后无法加载上传(本地)文件中的数据,隐含的文件为:
dbconnection.php
<?php
$server = "localhost";
$user = "TheUser";
$pass = "ThePass";
$db_name = "DbName";
$link = mysql_connect($server, $user, $pass);
mysql_select_db($db_name);
mysql_set_charset('utf8', $link);
?>
send2db.php
<?php
include 'dbconnection.php';
mysql_select_db("DbName") or die(mysql_error());
$query = "LOAD DATA LOCAL INFILE '$file' INTO TABLE `T1` FIELDS TERMINATED BY ';' OPTIONALLY ENCLOSED BY '\"' ";
mysql_query($query) or die(mysql_error());
?>
错误说:
ERROR 1148 (42000): The used command is not allowed with this MySQL version
在mysql里面:
SHOW GLOBAL VARIABLES LIKE 'local_infile';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| local_infile | ON |
+---------------+-------+
1 row in set (0.00 sec)
但如果我以这种方式访问mysql,可以加载文件:
mysql --local-infile -p
所以我的问题是,我可以在dbconnection.php文件中设置此选项,我已经尝试了很多方法但没有成功,我一直在阅读有关my.cnf配置和其他一些内容的帖子但是没有任何用处我,有什么建议吗?
谢谢
更新 我一直在把整个网络的代码更改为mysqli,ufff !!,按照答案中的建议,我做了下一个代码,但没有成功,我仍然得到消息:“使用的命令不允许这个MySQL版本“。暗示文件是下一个:
acessdb.php
<?php
$link = new mysqli($server, $user, $pass, $dbname);
?>
send2db.php
<?php include 'acessdb.php';
$link->options(MYSQLI_OPT_LOCAL_INFILE, true);
mysqli_query($link, "LOAD DATA LOCAL INFILE 'upfiles/file.csv' INTO TABLE `T1` FIELDS TERMINATED BY ';' OPTIONALLY ENCLOSED BY '\"'") or die(mysqli_error($link));
$link->options(MYSQLI_OPT_LOCAL_INFILE, false);
?>
有什么建议吗?
答案 0 :(得分:3)
在my.cnf(或系统上的mysql配置文件)中设置选项:
local-infile=1
重启MySQL服务,这应该可以解决您的问题。
<强>更新强> 尝试使用PHP的另一种选择
$conn = mysqli_init();
$conn->options(MYSQLI_OPT_LOCAL_INFILE, true);
试一试,看看是否有效。选项链接mysqli options
答案 1 :(得分:0)
LOCAL INFILE
是一种机制,通过该机制,数据库服务器可以从数据库客户端(= PHP服务器)请求或多或少的任何文件如果您不能完全信任您的服务器和网络,这可能是危险的。因此,必须在服务器上(与您一样)允许LOCAL INFILE
,就像在数据库客户端上一样。
您正在使用旧的过时且未维护的PHP mysql
扩展名。该扩展程序不支持设置标志。您应切换到mysqli
,其MYSQLI_OPT_LOCAL_INFILE
选项启用此模式。
<?php
$m = new mysqli(...);
$m->option(MYSQLI_OPT_LOCAL_INFILE, true);
$m->query("LOAD DATA LOCAL INFILE ....");
$m->option(MYSQLI_OPT_LOCAL_INFILE, false);
?>
答案 2 :(得分:0)
仔细阅读上面的评论,并创建如下的清单:
我在同一个问题上苦苦挣扎了5个多小时。这些是摘要步骤,它们可以帮助我更快地进行故障排除和解决此问题。在弄乱配置文件之前,我会尝试这些步骤,这可能会导致意想不到的后果。感谢大家的贡献。
答案 3 :(得分:-1)
由于自PHP 5.5.0以来不推荐使用mysql_connect()(并且将来会被删除),因此问题不是来自您的Web服务器(Apache?)而不是您的SQL版本。
导致此问题的另一件事是您的文件内容最终包含depreacted命令(这是错误消息似乎告诉您的内容)。