Mysql

使用載入數據本地 infile 將 csv 文件載入到 mysql

  • January 31, 2022

我需要一種簡單的方法將 csv 文件從我的電腦載入到數據庫(位於遠端伺服器上)。我正在嘗試使用執行此程式碼的 php 頁面載入文件:

$file = $_FILES['csv']['tmp_name']; 
$handle = fopen($file,"r"); 
$name = $_FILES['csv']['name'];

$ import = “LOAD DATA LOCAL INFILE ‘” . $ 姓名 。"’ INTO TABLE temporal_load FIELDS TERMINATED BY ‘,’

可選 ENCLOSED BY ‘"’ LINES TERMINATED BY ‘\n’ IGNORE 1 LINES (num,ticker,company,sector,industry)";

mysql_query($import) 或死(mysql_error());

但是當我在 php 頁面上選擇一個文件並嘗試載入它時,會顯示錯誤消息:

找不到文件“test11-14-15.csv”(錯誤程式碼:2)

我已經查看了變數 mysql.allow_local_infile 是 ON 並且數據庫連接是這樣建立的:

mysql_connect(主機,使用者,密碼,假,128);

該文件不在遠端伺服器上,該文件在我的電腦上,但它應該可以工作,因為我使用的是 LOCAL。

我究竟做錯了什麼???

您的問題在於使用變數 $ name on your LOAD DATA LOCAL INFILE statement, you should use the variable $ 在你的聲明中歸檔..

您的陳述應更改為;

$import = "LOAD DATA LOCAL INFILE '" . $file. "' INTO TABLE temporal_load FIELDS TERMINATED BY ',' optionally ENCLOSED BY '\"' LINES TERMINATED BY '\r\n' IGNORE 1 LINES (num,ticker,company,sector,industry) ";

mysql_query($import) or die(mysql_error());

您需要在導入查詢中使用$_FILES['csv']['tmp_name']而不是。$name

所以你的 php 函式可能看起來像:

$filename = $_FILES['csv']['tmp_name'];

$import = "LOAD DATA LOCAL INFILE '" . $filename . "' INTO TABLE temporal_load FIELDS TERMINATED BY ',' optionally ENCLOSED BY '\"' LINES TERMINATED BY '\n' IGNORE 1 LINES (num,ticker,company,sector,industry) ";

mysql_query($import) or die(mysql_error());

引用自:https://dba.stackexchange.com/questions/121893