2017-06-14 96 views
1

我有一個PHP代碼,將創建一個表使用csv文件的MySQL數據庫。但是,一些列標題不被mysql讀取。 mysql會讀取查詢的唯一時間是當我添加反引號(`)。你能幫我解決我的問題嗎? :(添加反引號創建表與MySQL的CSV文件-PHP

這裏是我的代碼:

$file = 'C:\Users\user\Desktop\Sample CSV 
Files\672VER.csv'; 
$table = '`672ver`'; 

// get structure from csv and insert db 
ini_set('auto_detect_line_endings',TRUE); 
$handle = fopen($file,'r'); 
// first row, structure 
if (($data = fgetcsv($handle)) === FALSE) { 
echo "Cannot read from csv $file";die(); 
} 
$fields = array(); 
$field_count = 0; 
for($i=0;$i<count($data); $i++) { 
$f = strtolower(trim($data[$i])); 
if ($f) { 
// normalize the field name, strip to 20 chars if too long 
$f = substr(preg_replace ('/[^0-9a-z]/', '_', $f), 0, 100); 
$field_count++; 
$fields[] = $f.' VARCHAR(500)'; 
} 
} 

$sqlcreate = "CREATE TABLE $table (" . implode(', ', $fields) . ')'; 


echo $sqlcreate; 

回答

1

如果括在反引號字段名,這將阻止它試圖解釋一些列的名稱爲保留字...

$fields[] = '`'.$f.'` VARCHAR(500)'; 
+0

這樣做:D謝謝! :)如果你不介意我問...你是什麼意思列名作爲保留字?你能舉個例子嗎? – Rukikun

+0

列名,例如'order','select','value' ......基本上任何通常是SQL語句的一部分的單詞都被區別對待。 –

+0

好的。當我使用反引號時,我會盡量記住這些列名稱:)感謝您的提示。 :) – Rukikun

0

我覺得你可以做

$sqlcreate = "CREATE TABLE $table (`" . implode("`, `", $fields) . "`)"; 
+0

對不起...... MySQL並沒有因爲逗號(,)尚未讀讀我的查詢:C – Rukikun

+0

它說一個逗號或閉架預計 – Rukikun

+0

Thiis也會把'圍繞字段類型定義。 –

1

以這種方式更改循環的最後一行:

$fields[] = '`' . $f . '` VARCHAR(500)'; 

我希望它工作正常,

+0

是的,它的工作:)謝謝。 – Rukikun