忍者ブログ
バナヤンの忍者風呂
忍者ブログのカスタマイズ、各種WEBツールのテストなど試行錯誤の日々。 VMLによる地図の作成を研究していましたが、一時中断して、今はPHPを勉強しているところです。
ニュース
この欄には、このブログの内容に関連するニュースを掲載する予定です。
お知らせ
この欄には管理人からのお知らせなどを掲載します。
[56] [57] [58] [59] [60] [61] [62] [63] [64] [65] [66]

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

PHP+SQLite テーブル情報(sqlite_master)

前回の「PHP+SQLite テーブル作成(CREATE TABLE) 」では、そこで作成したテーブル「member」にデータを入力する方法を今回のテーマとすることを予告していました。しかしながら、データを入力する前に、テーブルが意図どおりに作成されているか確認したくなりました。何かいい方法はないでしょうか。

SQLiteでは特殊なテーブル「sqlite_master」というものがあって、このテーブルに作成したテーブルやインデックスの情報が格納されます。このテーブルを見てみたいと思います。

まず、前々回の「PHP+SQLite クエリの実行(sqlite_query) 」でソースを示したクエリの入力画面を修正して、クエリの結果ハンドルを示すだけでなく、結果セットのデータも表示するようにしましょう。

[ソース]sqlite_queryパラメータ入力画面--sqlite_query().php

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<meta http-equiv="Pragma" content="no-cache">
<title>sqlite_query()</title>
<style type="text/css">
<!--
table,td {border:#669966 solid 1px;empty-cells:show;}
th {border:#669966 solid 1px;background-color:#ccffcc;}
-->
</style>
</head>
<body>
<h1>SQLite クエリの実行</h1>
<p>SQLiteでクエリを実行します。データベース名とクエリを入力して下さい。</p>
<form method='post' action="<?= $_SERVER[PHP_SELF] ?>">
DatabaseName:<br>
<input type='text' name='dbname' value="<?= $_POST['dbname'] ?>"><br>
Query:<br><input type='text' name='query' value="<?= $_POST['query'] ?>" size='120'>
<input type='submit' value='実行'>
</form>
<h2>Queryサンプル</h2>
<p>SELECT * FROM sqlite_master</p>

<hr>

<?php
if($_POST['dbname']){
$db = sqlite_open($_POST['dbname']);
if(!($db)){
die("データベースをオープンできません。");
}else{
$query = $_POST['query'] ;
$query = htmlspecialchars($query) ;
$query = str_replace("\\","",$query);
$result = sqlite_query($db,$query);
echo "クエリを実行しました(結果ハンドル:".$result.")<br>";
$fields = sqlite_num_fields($result);
$rows = sqlite_num_rows($result);
echo "<table><tr>";
for($i=0;$i<$fields;$i++){
echo "<th>".$i."</th>";
}
echo "</tr><tr>";
for($i=0;$i<$fields;$i++){
$field_name=sqlite_field_name($result,$i);
echo "<th>".$field_name."</th>";
}
echo "</tr>";
for($j=0;$j<$rows;$j++){
$record = sqlite_fetch_array($result);
echo "<tr>";
for($i=0;$i<$fields;$i++){
echo "<td>".$record[$i]."</td>";
}
echo "</tr>";
}
echo "</table>";
}
}
?>
</body>
</html>


これをブラウザで表示した例を次のイメージで示します。
データベース名を「memberdb」、クエリを「SELECT * FROM sqlite_master」として実行した例です。

[画面サンプル]テーブル情報表示「SELECT * FROM sqlite_master」
テーブル情報表示「SELECT * FROM sqlite_master」<br />

「sqlite_master」テーブルは、type,name,tbl_name,rootpage,sqlの5つのフィールドを持っています。
●type---tableかindexか
●name---typeがtableの場合はテーブル名
        indexの場合はどのテーブルのインデックスか
●tbl_name---テーブル名
●rootpage---ハンドルでしょうか?
●sql--------当該テーブルを作成するSQL文

画面サンプルにあるように、データベース「memberdb」には、テーブル「member」が存在していることがわかります。

上記のようにデータベース内にどのような名前のテーブルがあるか知りたいときは、「SELECT * FROM sqlite_master」を実行しましょう。

PR
QRコード
忍者ブログ [PR]
Copyright (C) 2006 banayan ALL RIGHTS RESERVED.