mysql通过php脚本加载数据infile - 无法正常工作

And*_*ing 2 php mysql mysqli load-data-infile

我正在尝试使用mysql LOAD DATA LOCAL INFILE通过使用mysqli的php脚本将一些csv数据导入我的mysql数据库.这是我的sql字符串的样子:

LOAD DATA LOCAL INFILE '/var/www/html/dashmaker/uploads/HHdata.csv' INTO TABLE dashmaker.HHdata FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' LINES TERMINATED BY '\n' IGNORE 1 LINES;
Run Code Online (Sandbox Code Playgroud)

这是我的PHP脚本的样子:

$sql = "LOAD DATA LOCAL INFILE '/var/www/html/dashmaker/uploads/HHdata.csv'
       INTO TABLE dashmaker.HHdata
       FIELDS TERMINATED BY ','
       OPTIONALLY ENCLOSED BY '\"' 
       LINES TERMINATED BY '\n' 
       IGNORE 1 LINES;";

$con=mysqli_connect("localhost","[user]","[password]","[database]");
// Check connection
if (mysqli_connect_errno()) {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
};

$result = mysqli_query($sql, $con);

if (mysql_affected_rows() == 1) {
  $message = "The data was successfully added!";
} else {
  $message = "The user update failed: ";
  $message .= mysql_error(); 
};

echo $message;

mysqli_close($con);
Run Code Online (Sandbox Code Playgroud)

我发现我需要将mysql my.cnf设置为在[mysql]和[mysqld]下包含local-infile - 所以我已经这样做了.

当我通过shell运行sql查询时,它可以工作.当我尝试通过php脚本执行它时,我现在得到的错误消息($ message)说:

The user update failed: Access denied for user ''@'localhost' (using password: NO) 
Run Code Online (Sandbox Code Playgroud)

一个奇怪的事情是它在@'localhost'之前没有显示任何用户名.无法理解为什么.除此之外,我使用相同的连接设置使用PHP脚本从数据库运行常规SELECT查询.用户还具有FILE权限.

我进行了广泛的搜索,但没有找到任何可以解释发生了什么的东西.任何建议将不胜感激.

Fun*_*ner 7

您在几个实例中混合了MySQL API mysql_mysqli_函数.

  • mysql_affected_rows()
  • mysql_error()

他们混在一起; mysqli_ 专门使用.

另外,你不是在[user]等等中使用括号,是吗?那就是MSSQL语法,删除它们.

另外,在mysqli_DB连接中,首先将这些反转$result = mysqli_query($sql, $con);为读取$result = mysqli_query($con, $sql);

$sql = "LOAD DATA LOCAL INFILE '/var/www/html/dashmaker/uploads/HHdata.csv'
       INTO TABLE dashmaker.HHdata
       FIELDS TERMINATED BY ','
       OPTIONALLY ENCLOSED BY '\"' 
       LINES TERMINATED BY '\n' 
       IGNORE 1 LINES;";

$con=mysqli_connect("localhost","user","password","database");
// Check connection
if (mysqli_connect_errno()) {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
};

$result = mysqli_query($con, $sql);

if (mysqli_affected_rows($con) == 1) {
  $message = "The data was successfully added!";
} else {
  $message = "The user update failed: ";
  $message .= mysqli_error($con); 
};

echo $message;
mysqli_close($con);
Run Code Online (Sandbox Code Playgroud)