テーブル名は分かるのですが、そのテーブルの構造(カラム数など)は分かりません。
テーブル名だけでそのテーブルのデータをMS Excelに変換するスクリプトは可能でしょうか?(ソースplz)
ちなみに日本語が含まれ、特殊文字(”など)も含まれます。UTF8です。
よろしくお願いします。
テーブル名が分かればカラム名は取得できます。
MySQL :: MySQL 4.1 リファレンスマニュアル :: 4.6.8.1 データベース、テーブル、カラム、およびインデックスに関する情報の取得
$table = 'tablename';
$sql = 'show fields from '.$table;
$result = mysql_query($sql, CONNECTION);
$fieldAr = array();
while ($ret = mysql_fetch_assoc($result)){
foreach($ret as $key => $fields){
$fieldAr[$key][] = $fields;
}
}
print_r ( $fieldAr) ;
特殊文字(”など)はどうなるかわかりませんがこれでどうでしょう。
データをMS Excelに変換するスクリプトは可能でしょうか?
no point
MySQL の CSVエクスポート機能を利用します。
スクリプト冒頭の4つの変数は、ご利用の環境に合わせて設定してください。
<?php $hostname = 'MySQLホスト名'; $username = 'MySQLユーザー名'; $password = 'MySQLパスワード'; $csvfname = '出力CSVファイル名'; //開始処理 $con = mysql_connect($hostname, $username, $password) or die(mysql_error()); mysql_select_db('dbname') or die(mysql_error()); //出力をシフトJISに $sql = "set character set sjis;"; mysql_query($sql) or die(mysql_error()); //CSVファイル出力 $sql = "select * from database into outfile \"" . $csvfname . "\" fields terminated by \',\' enclosed by \" lines terminated by \'\\r\\n\';" mysql_query($sql) or die(mysql_error()); //終了処理 mysql_free_result($res); mysql_close($conn); ?>
レンサバな為、CSVエクスポート機能は利用できません。
MySQLの質問をする場合は、バージョンを明記してください。
MySQL 5.0以降であれば、information_schemaが実装されています。
MySQL :: MySQL 5.1 リファレンスマニュアル :: 21.3 INFORMATION_SCHEMA COLUMNS テーブル
これを活用することで、SQLで情報を得られます。
select * from information_schema.columns where table_name='t1' order by ordinal_position
phpで行うのが、大前提なのでしょうか?
EXCELで得ることが目的なら、MyODBCを使って得られます。
>テーブル名は分かるのですが、そのテーブルの構造(カラム数など)は分かりません。
カラム数は分からなくても、CSV等は作れますよね。問題ないです。
>テーブルのデータを
カラム名の入ったヘッダ行は不要と判断しました。
>MS Excelに変換する
「ダブルクリックしたらExcelで開ける」でOKでしょうか?
>ちなみに日本語が含まれ、特殊文字(”など)も含まれます。
改行は無い、と判断しました。
一番簡単な方法は、TSV(タブ区切りテキスト)にして、拡張子.xlsで保存すること。
ExcelはSJISでないと文字化けしますので、文字コードはSJISに変換することになります。
<?php $target = './hoge.xls'; $db = MDB2::connect(適切なパラメータ); $result = $db->queryAll("SELECT * FROM hoge"); foreach($result as $row){ $tsv_row = implode("\t", $row) . "\r\n"; $sjis_tsv_row = mb_convert_encoding($tsv_row, 'SJIS-win', 'UTF-8'); file_put_contents($target, $sjis_tsv_row, FILE_APPEND|LOCK_EX); } ?>
np