加载数据本地infile mysql服务器php Ubuntu


load data local infile mysql server php Ubuntu

我发布了这个决议,因为它让我疯狂了几天——原来是AppArmor设置。这个线索终于让我解决了:如何使用SELECT INTO OUTFILE绕过MySQL错误代码13?

我看到这被标记为重复,但所有其他建议似乎都指向编辑my.cnf,这对我不起作用。

我无法使加载数据本地Infile工作。我的MySQL服务器版本是5.5.41,我的Ubuntu版本是14.04.2。My.cnf在mysql、mysqld和client下都有"localinfile"。下面我在Stackoverflow上的另一篇文章中指定连接字符串中的标志128。当我在客户端上运行它时,下面的代码工作得很好,但现在它位于服务器上,它不断抛出

"此MySQL版本不允许使用所使用的命令。

EDIT,从命令行运行此操作成功:

mysql> LOAD DATA LOCAL INFILE '/home/aa/ER.csv'
    ->      INTO TABLE ER_import
    ->      FIELDS TERMINATED BY ','
    ->      LINES TERMINATED BY ''r'n'
    ->      IGNORE 1 LINES
    ->     (Paid_Amount,
    -> Pro_Number,
    -> Invoice,
    -> Ship_Date,
    -> BL,
    -> Carrier_Name,
    -> Check_Number,
    -> Paid_Date,
    -> Shipper_City,
    -> Shipper_State,
    -> Shipper_Name_1,
    -> Recipient_City,
    -> Recipient_State,
    -> Recipient_Name_1,
    -> Batch_Number,
    -> Actual_Weight,
    -> Billed_Amount
    -> );
Query OK, 8585 rows affected, 4 warnings (0.21 sec)
Records: 8585  Deleted: 0  Skipped: 0  Warnings: 4

然而,这一直在重新调整文件没有找到:"文件'/home/aa/ER.csv'没有找到(错误代码:13)"文件肯定在那里,权限是正确的:

$delete = "DELETE FROM ER_import";
 if (!mysqli_query($conn,$delete))
   {
   echo("Error description: " . mysqli_error($conn));
   }
$query = <<<eof
    LOAD DATA INFILE '/home/aa/ER.csv'
     INTO TABLE ER_import
     FIELDS TERMINATED BY ','
     LINES TERMINATED BY ''r'n'
     IGNORE 1 LINES
    (Paid_Amount,
Pro_Number,
Invoice,
Ship_Date,
BL,
Carrier_Name,
Check_Number,
Paid_Date,
Shipper_City,
Shipper_State,
Shipper_Name_1,
Recipient_City,
Recipient_State,
Recipient_Name_1,
Batch_Number,
Actual_Weight,
Billed_Amount
);
eof;

if($results = mysqli_query($conn, $query)){
  echo $file. " has been imported!";
} else die(mysqli_error($conn));

这是明显的吗??

尝试这种方式

$query = <<<eof
    LOAD DATA LOCAL INFILE DIR_FILE
     INTO TABLE ER_import
     FIELDS TERMINATED BY ','
     LINES TERMINATED BY ''r'n'
     IGNORE 1 LINES
eof;
$query = str_replace('DIR_FILE',$dir.$file,$query);

因为<<<eof意味着您不希望php解析以下字符串中的任何内容。但是您正在尝试$dir$file,这意味着您希望thtaphp将用值替换此变量。

LOCALLOAD DATA LOCAL INFILE中的含义有一个非直觉的扭曲。只有当加载的文件不是服务器本地的时,才需要使用LOCALLOCAL告诉MySQL客户端获取本地文件并将其放置在服务器上的临时目录中。https://dev.mysql.com/doc/refman/5.5/en/load-data.html

当您在服务器上运行php脚本时,请尝试从命令中去掉单词LOCAL

几年前我也遇到过同样的问题。

需要为客户端和服务器启用本地infile。

我建议您在尝试使用PHP之前,先尝试从命令行界面运行LOAD DATA LOCAL INFILE。要确保来自客户端的连接启用本地infile,请运行以下命令:

mysql --local-infile=1 -h REPLACE_HOST_IP -u username -p

祝你好运!