2017-05-22 76 views
0

我在這裏仍然是新手。我想在php腳本上使用mysql LOAD DATA INFILE來加載csv文件。它既不會給出任何錯誤,也不會加載任何數據。任何人都可以請幫我嗎?我使用下面的PHP代碼PHP加載數據Infile不起作用

<?php 

$db1=mysql_connect('localhost', 'root', ''); 
mysql_select_db('student',$db1); 

$query = "LOAD DATA INFILE 'mysqlresults.csv' INTO TABLE student.student_info FIELDS TERMINATED BY ','"; 

$result = mysql_query($query); 
if ($result == true){ 
echo 'success'; 
} 
else{ 
echo 'not success'; 
} 
?> 
+0

該文件mysqlresults.csv是在你的php目錄中嗎? Mysql不知道這個路徑,你應該得到該文件的絕對路徑,並將其傳遞給mysql –

+0

請顯示更多代碼。最好是[mcve] – Jens

+0

是的,它已經在我的php目錄中了。當我嘗試在mysql Workbench中運行LOAD DATA INFILE'mysqlresults.csv'INTO TABLE student.student_info FIELDS TERMINATED BY','查詢時,它解決了,但是當我嘗試在php腳本中運行時,它沒有@MarvinFischer – Peter

回答

0

您需要的路徑設置爲您的文件

LOAD DATA LOCAL INFILE '/path/to/your/local/file' INTO TABLE 

MySQL不會在相同的位置看的PHP腳本從運行,如MySQL會再看看在它自己的路徑位置,並且不會找到該文件(導致它在其他地方)。

您可以使用__DIR__在PHP獲取當前位置PHP運行它,所以查詢看起來像$query = "LOAD DATA INFILE ". __DIR__ . DIRECTORY_SEPARATOR . "'mysqlresults.csv' INTO TABLE student.student_info FIELDS TERMINATED BY ','";

的DIRECTORY_SEPARATOR的原因DIR沒有尾隨斜線

+1

這看起來像正確的答案,但爲什麼它的工作原理和問題中發佈的查詢不? – axiac

+0

mysql與php腳本運行的位置不同,因爲mysql會查找自己的路徑位置,並且找不到該文件(導致它位於其他位置),您可以在__DIR__中使用__DIR__ PHP獲取當前位置php正在運行它,所以查詢看起來像 '$ query =「LOAD DATA INFILE」。 __DIR__。 DIRECTORY_SEPARATOR。 「'mysqlresults.csv'INTO TABLE student.student_info FIELDS TERMINATED BY','」;' 'DIRECTORY_SEPARATOR'是因爲__DIR__沒有結尾的斜槓, –

+0

我知道所有這些事情。把它們放在爲未來讀者帶來好處的答案中。現在看起來你的答案不會得到許多讚揚,因爲讀者無法從中學到任何東西。 – axiac

0

您的PHP代碼使用作爲MySQL服務器的客戶端的MySQL擴展。這兩個組件(PHP和MySQL服務器)多次運行在不同的計算機上。

LOAD DATA INFILE從位於運行MySQL服務器的計算機上的CSV文件加載數據。

我想你的文件位於運行PHP腳本的計算機上(即運行MySQL客戶端的計算機上)。

LOAD DATA INFILE命令的LOCAL選項告訴MySQL客戶端從其運行的計算機上的文件(「本地」計算機)加載數據並將其發送到服務器進行加載。

對於這兩個版本的命令,如果文件名不包含路徑,MySQL客戶端或服務器使用其配置來知道在哪裏搜索文件(事實證明它通常找不到它,因爲開發人員不知道/關心該配置並將該文件放在其他地方)。

解決方法很簡單:始終使用文件的絕對路徑。如果文件是本地文件(發生在涉及PHP的情況下99.99%),那麼您可以使用PHP魔術常量__DIR__和函數dirname()來構建從包含腳本的位置開始的CSV文件的絕對路徑代碼。

從您的代碼看來,CSV文件與PHP文件位於同一目錄(這不是一個好習慣)。代碼應該是這樣的:

$path = __DIR__.'/mysqlresults.csv'; 
$query = "LOAD DATA LOCAL INFILE '$path' INTO TABLE student.student_info FIELDS TERMINATED BY ','";