簡體   English   中英

使用PHP將CSV文件導入SQL不起作用

[英]Importing CSV file into SQL using PHP not working

我正在嘗試將CSV文件導入我的SQL數據庫。 這就是我所擁有的:

if ($_FILES[csvFile][size] > 0)
{ 
$file = $_FILES[csvFile][tmp_name]; 
$handle = fopen($file,"r"); 

do { 
    if ($data[0]) 
    { 

    $insert_query = "REPLACE INTO `teacherNames` SET 
    `schoolName` = '".addslashes($schoolname)."',
    `teacherName` = '".addslashes($data[0])."'
    ;";  

        $result = mysql_query($insert_query);
        echo $insert_query; -- SEE RESULTING QUERY BELOW
        echo $data[0]." added\n<br />";
    } 
} 
while ($data = fgetcsv($handle,1000,",","'"));

CSV文件有3條記錄,它看起來正確。 該過程在一定程度上可以正常工作,但是由於某種原因,它無法正確讀取CSV文件,並且結果查詢如下:

REPLACE INTO `teacherNames` SET `schoolName` = 'Brooks', `teacherName` = 'RMG JMC PMC';

當我希望得到3個單獨的查詢時-每個記錄一個。 它似乎不是以3個單獨的記錄的形式讀取CSV文件,而是以1的形式讀取。有人可以看到原因嗎?

更新:

CSV內容為:

RMG
JMC
PMC

如果文件與MySQL服務器位於同一台計算機上,則Julio Martins的解決方案會更好。

但是,如果您需要從PHP內部讀取文件,請訪問http://php.net/manual/en/function.fgetcsv.php ,了解來自PHP.NET的說明:

注意:如果在Macintosh計算機上或由Macintosh計算機讀取文件時,PHP無法正確識別行尾,則啟用auto_detect_line_endings運行時配置選項可能有助於解決問題。

文件的行尾如何? 由於所有行都被讀為一,所以我想這可能是您的情況。

要打開auto_detect_line_endings,請使用ini_set("auto_detect_line_endings", true); 如開心果在http://php.net/manual/en/filesystem.configuration.php#107333中所說

使用while代替do-while:

while ($data = fgetcsv($handle,1000,",","'")) {
    //...
}

嘗試加載數據:

LOAD DATA INFILE '{$filepath}'
INTO TABLE '{$table}'
FIELDS TERMINATED BY ','

比較干凈

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM