PHP で MYSQL のテーブルを CSV 出力したり
ちょっと需要があったので30分ぐらいで作った突貫プログラム。見て分かる通りセキュリティ穴だらけなんで使うとしたらローカルで使う等して下さい。このままだと実用には不向きですが改良すれば使えるかも。
< ?php $DBNAME="データベース名"; $DBUSER="ユーザ名"; $DBPASSWORD="パスワード"; $DBSERVER="データベースサーバ"; $con=mysql_connect($DBSERVER,$DBUSER,$DBPASSWORD); $query=rawurldecode($_SERVER['QUERY_STRING']); $querylist=explode("&",$query); extract($querylist); if (!empty($table_name)) { if ($mode=="csv") { show_csv($DBNAME,$table_name); } else { show_data($DBNAME,$table_name); } } else { show_tables($DBNAME,$con); } //テーブル一覧表示 function show_tables ($db_name, $db) { global $title; global $body; $title="「".$db_name."」テーブル一覧"; $rs=mysql_list_tables($db_name,$db); $num_rows=mysql_num_rows($rs); if ($num_rows > 0) { for ($i = 0; $i < $num_rows; $i++) { $table_name = mysql_table_name($rs,$i); $body.="<a href="$PHP_SELF?table_name=".$table_name."">".$table_name."[<a href="$PHP_SELF?table_name=".$table_name."&mode=csv">CSV</a>]n"; } } else { $body.="テーブルはありませんn"; } mysql_free_result($rs); return; } //テーブルデータ表示 function show_data ($db_name, $table_name) { global $title; global $body; $title="「".$table_name."」データ表示"; $sql="select * from ".$table_name.""; $rs=mysql_db_query($db_name,$sql); $fields=mysql_num_fields($rs); $rows=mysql_num_rows($rs); $body.="<table><tbody>n"; for ($i=0;$i< $rows;$i++) { $body.="<tr>"; for ($j=0;$j < $fields;$j++) { $body.="<td>"; $body.=mysql_result($rs,$i,$j); $body.=""; } $body.="n"; } $body.="</tbody></table>n"; mysql_free_result($rs); return; } //CSV出力 function show_csv ($db_name,$table_name) { header("Content-Type: application/octet-stream"); header("Content-Disposition: attachment; filename=".$table_name."_".date(ymd).".csv"); $sql="select * from ".$table_name.""; $rs=mysql_db_query($db_name,$sql); $fields=mysql_num_fields($rs); $rows=mysql_num_rows($rs); for ($i=0;$i< $rows;$i++) { for ($j=0;$j<$fields;$j++) { print(mb_convert_encoding(mysql_result($rs,$i,$j),'SJIS','auto')); if ($j<$fields - 1) print(","); } print("n"); } mysql_free_result($rs); exit; } mysql_close($con); ?> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> </meta><meta http-equiv="Content-Style-Type" content="text/css"> <title>< ?= $title ?></title> </meta></head> <body> <h1>< ?= $title ?></h1> < ?= $body ?> </body> </html>
データ表示も分割している訳もなく全データを表示してしまっているのでレコード数が多いとブラウザが固まって本当に使えません。CSV 出力する部分は何かと重宝するとか。しないとか。