PHP MySQL


テーブル名は分かるのですが、そのテーブルの構造(カラム数など)は分かりません。

テーブル名だけでそのテーブルのデータをMS Excelに変換するスクリプトは可能でしょうか?(ソースplz)

ちなみに日本語が含まれ、特殊文字(”など)も含まれます。UTF8です。

よろしくお願いします。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2009/02/23 11:36:47
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答5件)

id:Lu-such No.2

回答回数22ベストアンサー獲得回数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) ;

特殊文字(”など)はどうなるかわかりませんがこれでどうでしょう。

id:esecua

データをMS Excelに変換するスクリプトは可能でしょうか?

no point

2009/02/17 14:56:22
id:pahoo No.3

回答回数5960ベストアンサー獲得回数633

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);   
?>   
id:esecua

レンサバな為、CSVエクスポート機能は利用できません。

2009/02/18 10:26:27
id:chuken_kenkou No.4

回答回数722ベストアンサー獲得回数54

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を使って得られます。

MySQL V5 関連記事一覧 - [データベース]All About

id:sphire No.5

回答回数115ベストアンサー獲得回数12

>テーブル名は分かるのですが、そのテーブルの構造(カラム数など)は分かりません。

カラム数は分からなくても、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);
}

?>

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません