gpt4 book ai didi

php - 当 mysql 到远程服务器时,LOAD DATA LOCAL INFILE 不起作用

转载 作者:行者123 更新时间:2023-11-30 22:21:45 26 4
gpt4 key购买 nike

我正在研究加载数据功能。我主要有两台服务器,一台包含 MYsql,另一台用于 Web 门户。

当我尝试使用以下查询执行加载本地文件时,它会给我“此 MySQL 版本不允许使用的命令”错误。

Query :  "LOAD DATA LOCAL INFILE '/var/www/html/btisms/contact_data/".$file_name."' REPLACE 
INTO TABLE `tbl_recipient`
FIELDS
TERMINATED BY ','
ENCLOSED BY '\"'
LINES
TERMINATED BY '\n'
(`gr_grp_id`, `gr_cust_id`, `gr_name`, `gr_number`)
".

我已经执行了以下步骤。

1) 在my.cnf 和[client] 和[mysql] 标签中添加local-infile = 1。

2) 允许访问 apparmod 中的目录。

3) 向特定用户授予文件权限。

4) MySQL版本:5.5.4 (CentOS-7)

如果有任何遗漏,任何人都可以建议我。

当我尝试在 mysql 和 web 服务器位于同一台服务器上时执行此功能时,它正在工作。

最佳答案

您正在尝试加载本地文件。

如果您在另一台服务器上运行(远程或非远程),您必须确保该文件位于您在查询中使用的同一文件夹位置

如果文件不存在,mysql 将不会执行任何操作或抛出错误。

为了省去开发Mysql的麻烦,我推荐大家采用如下方案:

$handle = fopen("your_file", "r");
$con = mysqli_connect($db_host, $db_user, $db_pass, 'your_db_name');
$niceArr = array();

if ($handle) {
while (($line = fgets($handle)) !== false) {
// process the line read.
$lineArr = explode(",", trim($line) );

foreach($lineArr as $line ) {
// Remove ""
$niceArr[] = trim($line, '"');
}

// should check if isset($niceArr[ x ])
$q = "insert into tbl_recipient SET ".
"gr_grp_id = '$niceArr[0]',".
"gr_cust_id = '$niceArr[1]',".
"gr_name = '$niceArr[2]',".
"remoteaddr = '$niceArr[3]',".
"gr_number = '$niceArr[4]'";

$res = mysqli_query( $con, $q );
if( !empty( mysqli_error($con) ) ) {
throw new Exception("Error writing line in db: $db_host");
}

}
fclose($handle);
mysqli_close($con);

} else {
// error opening the file.
}

这样你可以:

  • 跟踪有关文件位置的错误,
  • 跟踪有关格式不正确的行的错误,最后
  • 分别出现mysql错误。

这将使您的生活更加轻松。

关于php - 当 mysql 到远程服务器时,LOAD DATA LOCAL INFILE 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36491926/

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