[教學分享]用php把csv檔匯入mysql資料庫

Home Home
引用 | 編輯 surro
2004-11-16 10:53
樓主
推文 x0
我在windows做的csv檔,可以在excel被打開但未必能在phpmyadmin中匯入
我不知為何mysql對於csv檔的設定到底是什麼
在其他地方可用的csv,到了mysql未必可以,縱使你做了設定
於是就用php寫了一個匯入的程式
fgetcsv 這個函數是用來讀取csv檔的

他的中文說明如下

說明
array fgetcsv ( int fp, int length [, string delimiter [, string enclosure]])


和 fgets() 類似,只除了 fgetcsv() 解析讀入的行並找出 CSV 格式的字段然後傳回一個包含這些字段的陣列。字段分隔符是逗號,或者用可選的第三個參數另外指定。字段用雙引號包圍,或者用可選的第四個參數另外指定。Delimiter 和 enclosure 不能是 null 並且只有第一個字元有效。

fp 必須是通過 fopen(),popen() 或者 fsockopen() 成功打開的有效文件指針。

length 必須大於 CVS 文件中長度最大的行(以便於處理行結束字元)。

fgetcsv() 出錯時傳回 FALSE,包括碰到文件結束時。

註: CSV 文件中的空行將被傳回為一個包含有單個 NULL 字段的陣列,不會被當成錯誤。

enclosure 是 PHP 4.3.0 新加的。






以下範例是參考中文說明修改而來
原始程式碼請參考
http://www.php5.idv.tw/documents/php_big5/function.fgetcsv.html
這段程式碼增加了對資料表的新增動作

"
      $sql="INSERT INTO `mpwd` ( `NAME` , `CUNO` , `SERIAL` , `MPWD` )
          VALUES ('$temp[0]','$temp[1]','$temp[2]','$temp[3]')";
"

我一次讓他讀一個row,用","分隔,放入$temp陣列中
陣列中的數值是代表他在資料表中的第幾欄

mysql_connect("localhost","abc","glicd24d") or die("連線失敗請洽系統管理員");
mysql_select_db("test");
$dbname="abc.csv";
if ( !$fp = fopen($dbname,"r") ) {
      echo "Cannot open $dbname
";
      exit;
}else{

  $size = filesize($dbname)+1;
  $row=0;
  while($temp=fgetcsv($fp,$size,",")){
    if ($row>0){
      $sql="INSERT INTO `mpwd` ( `NAME` , `CUNO` , `SERIAL` , `MPWD` )
          VALUES ('$temp[0]','$temp[1]','$temp[2]','$temp[3]')";
      $result=mysql_query($sql);
      echo mysql_error();
    }
    $row=$row+1;
  }
  fclose($fp);
}

獻花 x0
引用 | 編輯 qwe34
2004-12-08 00:18
1樓
  
最近在學PHP

感謝大大提供的PHP教學

獻花 x0