带有--local-infile参数的mysql_connect

And*_*día 5 php mysql sql load-data-infile

自升级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);
?>
Run Code Online (Sandbox Code Playgroud)

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());
?>
Run Code Online (Sandbox Code Playgroud)

错误说:

ERROR 1148 (42000): The used command is not allowed with this MySQL version
Run Code Online (Sandbox Code Playgroud)

在mysql里面:

SHOW GLOBAL VARIABLES LIKE 'local_infile';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| local_infile  | ON    |
+---------------+-------+
1 row in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)

但是如果我以这种方式访问​​mysql,可以加载文件:

mysql --local-infile -p
Run Code Online (Sandbox Code Playgroud)

所以我的问题是,我可以在dbconnection.php文件中设置这个选项,我已经尝试了很多方法但没有成功,我一直在阅读关于my.cnf配置和其他一些东西的帖子但是没有什么对我有用,任何建议?

谢谢

更新: 我一直在将整个网络的代码更改为mysqli,ufff !!,按照答案的建议,我做了下一个代码,但没有成功,我仍然收到消息:"使用的命令不是允许这个MySQL版本".暗示文件是下一个:

acessdb.php

<?php
$link = new mysqli($server, $user, $pass, $dbname);
?>
Run Code Online (Sandbox Code Playgroud)

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);
?>
Run Code Online (Sandbox Code Playgroud)

有什么建议?

Hat*_*ber 5

在 my.cnf(或系统上的 mysql 配置文件)中设置选项:

local-infile=1
Run Code Online (Sandbox Code Playgroud)

重新启动 MySQL 服务,这应该会为您解决问题。

更新 尝试使用 PHP 的另一种选择

$conn = mysqli_init();
$conn->options(MYSQLI_OPT_LOCAL_INFILE, true);
Run Code Online (Sandbox Code Playgroud)

试试看,看看是否有效。选项链接mysqli 选项


And*_*día 2

好吧,终于我找到了方法,这是工作代码:

文件:connectdb.php

$link = mysqli_init();
mysqli_options($link, MYSQLI_OPT_LOCAL_INFILE, true);
mysqli_real_connect($link, $server, $user, $pass, $dbname);
Run Code Online (Sandbox Code Playgroud)

文件:send2db.php

mysqli_query($link, "LOAD DATA LOCAL INFILE 'upfiles/file.csv' INTO TABLE `T1` FIELDS TERMINATED BY ';' OPTIONALLY ENCLOSED BY '\"'") or die(mysqli_error($link));
Run Code Online (Sandbox Code Playgroud)

我希望它有帮助。