2011-10-10 158 views
0

這裏是我的MySQL表結構LOAD DATA LOCAL INFILE的MySQL/PHP問題

id | tracking_number | order_id 

下面是CSV文件的結構: (有時ORDER_ID缺失,這似乎是導致問題)

"1R2689Y603406","33097" 
"1R2689Y603404","33096" 
"1R2689Y603414", 
"1R2689Y603429","33093" 
"1R2689Y603452", 

這是我這是不工作電流SQL查詢: (該文件正在上傳,並且被正確讀取,它的查詢本身,這是造成問題)

 $sql = 'LOAD DATA LOCAL INFILE "'.$_FILES['my_file']['tmp_name'].'" 
     INTO TABLE table_tracking 
     FIELDS TERMINATED BY "," OPTIONALLY ENCLOSED BY "\"" 
     LINES TERMINATED BY "\n" 
     (tracking_number,order_id)'; 

     mysql_query($sql) or die(myqsl_error()); 

我的查詢出了什麼問題?謝謝你的幫助!

編輯:更改CSV結構以表示丟失的數據有時會發生。 更改的查詢相匹配,現在我使用的是一個

+0

你有什麼實際的錯誤?或者實際的意外行爲? – Romain

+0

該信息不會加載到數據庫中。 – kylex

+1

嘗試mysql_query(...)或死(mysql_error());並告訴我們你看到了什麼。 – voldomazta

回答

2

只是想在這裏(不是100%的信心),但你嘗試將目標列是這樣的:

mysql_query("LOAD DATA LOCAL INFILE '".$_FILES['my_file']['tmp_name']."' 
    INTO TABLE table_tracking FIELDS TERMINATED BY ',' 
    OPTIONALLY ENCLOSED BY '\"' 
    LINES TERMINATED BY '\n' 
    (tracking_number,order_id)"); 

您的表三列只提供兩個數據。

+0

您仍然需要確保$ _FILES包含一個有效的文件路徑,其中包含**正斜槓**,如MySQL所要求的。 – Johan

+0

@Laurent:這似乎解決了其中一個問題... – kylex

+0

@Johan是的。這是我沒有信心的部分。kylex:nice :) –

1

這爲我工作:

$sql = 'load data local infile "c:/users/ramon/desktop/1.csv" 
     into table test fields terminated by "," 
     optionally enclosed by "\"" 
     lines terminated by "\n"'; 

mysql_query($sql) or die(myqsl_error()); 

你也可能需要確保你的第三列具有缺省值。

+0

我有理由相信這是一個逃避的問題。 – voldomazta

+0

這似乎工作,除了我遇到問題。一些數據是不完整的(缺少訂單號),這似乎是拋棄了。 – kylex

+0

您可能只需將缺省值放置到缺少數據的字段,以使其不是必備條件。 – voldomazta

0

相反的$_FILES['my_file']['tmp_name'],嘗試

dirname(__FILE__)."/".$_FILES['my_file']['tmp_name'] 

dirname(__FILE__)將使得像完整的目錄路徑 'C:/路徑/到/目錄'。