mysqlなら show create table を書けばいいんだけど。SQLiteを使うとそれができない。困ったの何とかする。
sqlite_master からSELECTする
SELECT * from sqlite_master;
masterのテーブル構造
SQLITEのテーブル管理テーブルのテーブル構造。
|type|name|tbl_name|rootpage|sql|
type | テーブルならtable って書いてある。 |
name | |
tbl_name | 名前 table名 |
rootpage | |
sql | create table文 |
関数にしてみた。
<?php function get_col_names($table_name){ $SQL = "SELECT sql FROM (SELECT * FROM sqlite_master UNION ALL SELECT * FROM sqlite_temp_master) WHERE tbl_name LIKE '".$table_name."' AND type!='meta' ORDER BY type DESC, name "; $cols = array(); $ret = $pdo->query($SQL); $a = $ret->fetchAll(); $sql = $a[0]["sql"]; $sql = preg_replace("/\n/", '', $sql); $sql = preg_replace("/\r/", '', $sql); preg_match_all("/\\((.*)\\)/",$sql, $matches); $str = $matches[1][0]; $lines = preg_split('/,/', $str); foreach($lines as $idx => $line){ $line = preg_replace("/^\s+/", "", $line); preg_match("/^[^\s+]+/", $line, $m); $cols[] = $m[0]; } return $cols; }
使い方
<?php $colnames = get_col_names("books");
とやると、テーブルのカラム一覧が出てくる。抽象化に便利ですね。PDO::FETCH_ASSOCで一つデータを取り出してもいいんだけど、Crete table直後だとデータ無いしね。