網頁

2013年6月25日 星期二

MySQL 資料庫轉出採用 php 的寫法轉出為 CSV 檔

近日處理一個客戶的資料庫, 由於當初的系統為舊版的 MySQL 資料庫, 所以裡面的編碼有些問題, 必須轉出為  csv 檔案格式另外處理.


以下為轉出檔案所使用的  php 內容


<?php
 $host = 'localhost'; // <--  db address
 $user = 'user'; // <-- db user name
 $pass = 'pass'; // <-- password
 $db = 'db_name'; // db's name
 $table = 'table_name'; // table you want to export
 $file = 'csv_name'; // csv name.

$link = mysql_connect($host, $user, $pass) or die("Can not connect." . mysql_error());
mysql_select_db($db) or die("Can not connect.");

$result = mysql_query("SHOW COLUMNS FROM ".$table."");
$i = 0;

if (mysql_num_rows($result) > 0) {
while ($row = mysql_fetch_assoc($result)) {
$csv_output .= "`".$row['Field']."`;";
$i++;
}
}
$csv_output =substr($csv_output,0,strlen($csv_output)-1);
$csv_output .= "\n";

$values = mysql_query("SELECT * FROM ".$table."");

while ($rowr = mysql_fetch_row($values)) {
for ($j=0;$j<$i;$j++) {
$csv_output .= "`".$rowr[$j]."`;";
}
$csv_output =substr($csv_output,0,strlen($csv_output)-1);
$csv_output .= "\n";
}

$filename = $file."_".date("d-m-Y_H-i",time());

header("Content-type: application/vnd.ms-excel");
header("Content-disposition: csv" . date("Y-m-d") . ".csv");
header( "Content-disposition: filename=".$filename.".csv");

print $csv_output;

exit;
?>



這一個 script 在網路上都可以查到, 不過有一點要注意的就是我加上了


$csv_output =substr($csv_output,0,strlen($csv_output)-1);

因為要使用 phpMyAdmin 匯入資料, 所以原本的  script 會在每一行資料串的後端多產生出一個分號 ";" 造成轉入資料失敗, 因此加入了這一段語法去掉多出的內容.

另外; 在每個資料欄中採用的分隔為 " ` " (鍵盤上 "~" 這一個按鍵上的分隔符號), 這樣在匯入資料時就比較不會出錯, 也要記得將 phpMyAdmin 中匯入時改用這一個分隔符號.



沒有留言:

張貼留言