2015-10-16 31 views
2

我將盡我所能解釋我的目標是什麼。我在網上搜索的所有東西都不足以讓我獲得一個想法。PHP - 插入到多個表中,每個表都帶有標識字段

首先,這是一個PHP任務,我們必須將CSV文件加載到MySQL數據庫中。

現在,每個表格(共4個)具有完全相同的字段值。我試圖完成的是使用每個循環的填充每個表與CSV文件中的信息。我知道我可以通過爲每個表格和CSV文件設置一個while循環來做到這一點,但我試圖超越需求並瞭解更多關於PHP的知識。這裏是我的代碼,我想要做到:

$files = glob('*.txt'); // .txt required extension 
foreach($files as $file) { 

    if (($handle = fopen($file, "r")) !== FALSE) { 
     while (($data = fgetcsv($handle,4048, ",")) !== FALSE) { 
      echo $data[0]; // making sure data is correct 
      $import = "INSERT INTO".basename($file)."(id,itemName,price) VALUES('$data[0]','$data[1]','$data[2]')"; 
      multi_query($import) or die (mysql_error()); 
     } 
     fclose($handle); 
    } 
    else { 
     echo "Could not open file: " . $file; 
    } 
} 

每個CSV文件包含iditemNameprice。希望這可以理解。謝謝

+0

multi_query不叫這樣一個更聰明的方法。如果您使用的是程序變體,那麼第一個參數是連接,然後是查詢。 – Palantir

+1

除了明顯的語法錯誤(你需要在'INTO「中有一個空格......),這聽起來像是一個非常糟糕的數據庫設計,最好的辦法是規範你的數據,而不是重複自己 –

+0

另外,試着打印你的$ import來檢查它裏面是否有正確的語法和變量(提示:它沒有) – Palantir

回答

1

將數據導入到MySQL中的方式對於小數據量是可以的。但是,如果您要導入大量(成千上萬行),最好的方法是直接將它導入到MySQL中,方法是使用infile。佛例如:

LOAD DATA LOCAL INFILE '/path/to/your_file.csv' 
INTO TABLE your_table_name 
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"' LINES 
TERMINATED BY '\n' (id, itemName, price) 

這是導入您的CSV數據:)

+0

我猜他的目標是在PHP中實現它(作爲一項學習任務)。請參閱*這是一個PHP任務,我們必須從他的問題中將CSV文件加載到MySQL數據庫*中。 –

+0

只需通過PHP執行SQL,它就成爲一個PHP項目! –

相關問題