6.3 データベースやテーブルのメタデータの表示
■データベースの一覧表示
接続したデータベースサーバ内にある利用可能なデータベースの一覧表示を行うには、まずmysql_list_dbs()関数を呼びます。
結果ID = mysql_list_dbs(接続ID)
結果IDに対応する結果セットには、1レコードごとにデータベースに関する情報が格納されています。そのレコードからmysql_db_name()関数でデータベース名を取得します。
データベース名 = mysql_db_name(結果ID,レコード番号)
なお、レコード番号は0から始まります。
サンプルファイル「show_databases.php」を以下に示します。データベースの一覧表示のためのユーザ定義関数show_databases()を定義し、利用しています。
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;
charset=EUC-JP">
<title>show_databases.php</title>
</head>
<body>
<?php
// データベースサーバへの接続
$db = mysql_connect('localhost','webapl','pass1234');
// データベースの一覧表示の関数呼び出し(ユーザ定義関数)
show_databases($db);
// データベースサーバの切断
mysql_close($db);
// ----------------------------------------------
// データベースの一覧表示の関数の定義
function show_databases($db)
{
// データベースリストの取得
$rs = mysql_list_dbs($db);
// 結果セット内のレコード数の取得
$num_rows = mysql_num_rows($rs);
print "<table border=1 cellpadding=0 cellspacing=0>\n";
print "<tr>\n";
print "<td align=center>Database</td>\n";
print "</tr>\n";
// 結果セット内のレコードを順次参照
for($i = 0; $i < $num_rows; $i++)
{
// データベース名の取得
$db_name = mysql_db_name($rs,$i);
// データベース名の表示
print "<tr>\n";
print "<td>{$db_name}</td>\n";
print "</tr>\n";
}
print "</table>\n";
// 結果セットの解放
mysql_free_result($rs);
}
?>
</body>
</html>
結果はたとえば、以下のように表示されます。

■テーブルの一覧表示
データベース内のテーブルの一覧表示を行うには、mysql_list_tables()関数を使います。
結果ID = mysql_list_tables(データベース名,接続ID)
結果IDに対応する結果セットには、1レコードごとにテーブルに関する情報が格納されています。そのレコードからmysql_table_name()関数でテーブル名を取得します。なお、レコード番号は0から始まります。
テーブル名 = mysql_table_name(結果ID,レコード番号)
サンプルファイル「show_tables.php」を以下に示します。テーブルの一覧表示のためのユーザ定義関数show_tables()を定義し、利用しています。
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;
charset=EUC-JP">
<title>show_tables.php</title>
</head>
<body>
<?php
// データベースサーバへの接続
$db = mysql_connect('localhost','webapl','pass1234');
// テーブルの一覧表示の関数呼び出し(ユーザ定義関数)
show_tables('db_販売管理',$db);
// データベースサーバの切断
mysql_close($db);
// ----------------------------------------------
// テーブルの一覧表示の関数の定義
function show_tables($db_name,$db)
{
// 指定されたデータベース内のテーブルリストの取得
$rs = mysql_list_tables($db_name,$db);
// 結果セット内のレコード数の取得
$num_rows = mysql_num_rows($rs);
print "<table border=1 cellpadding=0 cellspacing=0>\n";
print "<tr>\n";
print "<td align=center>Tables in {$db_name}</td>\n";
print "</tr>\n";
// テーブルがある場合
if($num_rows > 0)
{
// 結果セット内のレコードを順次参照
for($i = 0; $i < $num_rows; $i++)
{
// テーブル名の取得
$table_name = mysql_table_name($rs,$i);
// テーブル名の表示
print "<tr>\n";
print "<td>{$table_name}</td>\n";
print "</tr>\n";
}
}
// テーブルが無い場合
else
{
print "<tr>\n";
print "<td>テーブルはありません</td>\n";
print "</tr>\n";
}
print "</table>\n";
// 結果セットの解放
mysql_free_result($rs);
}
?>
</body>
</html>
結果はたとえば、以下のように表示されます。

■フィールド名の一覧表示
テーブル内のフィールド名の一覧表示を行うには、mysql_list_fields()関数を使います。
結果ID = mysql_list_fields(データベース名,テーブル名,接続ID)
結果IDに対応する結果セットには、1レコードごとにフィールドに関する情報が格納されています。そのレコードからmysql_field_name()関数でテーブル名を取得します。なお、レコード番号は0から始まります。
フィールド名 = mysql_field_name(結果ID,レコード番号)
サンプルファイル「show_fields_name.php」を以下に示します。フィールド名の一覧表示のためのユーザ定義関数show_fields_name()を定義し、利用しています。
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;
charset=EUC-JP">
<title>show_fields_name.php</title>
</head>
<body>
<?php
// データベースサーバへの接続
$db = mysql_connect('localhost','webapl','pass1234');
// フィールド名の一覧表示の関数呼び出し(ユーザ定義関数)
show_fields_name('db_販売管理','tbl_商品',$db);
// データベースサーバの切断
mysql_close($db);
// ----------------------------------------------
// フィールド名の一覧表示の関数の定義
function show_fields_name($db_name,$tbl_name,$db)
{
// 指定されたデータベース、テーブル内のフィールドリストの取得
$rs = mysql_list_fields($db_name,$tbl_name,$db);
// 結果セット内のフィールド数の取得
$num_rows = mysql_num_fields($rs);
print "テーブル「{$tbl_name}」内のフィールド名一覧\n";
print "<table border=1 cellpadding=0 cellspacing=0>\n";
print "<tr>\n";
print "<td align=center>フィールド名</td>\n";
print "</tr>\n";
// フィールドがある場合
if($num_rows > 0)
{
// 結果セット内のレコードを順次参照
for($i = 0; $i < $num_rows; $i++)
{
// フィールド名の取得
$field_name = mysql_field_name($rs,$i);
// フィールド名の表示
print "<tr>\n";
print "<td>{$field_name}</td>\n";
print "</tr>\n";
}
}
// フィールドが無い場合
else
{
print "<tr>\n";
print "<td>フィールドはありません</td>\n";
print "</tr>\n";
}
print "</table>\n";
// 結果セットの解放
mysql_free_result($rs);
}
?>
</body>
</html>
結果はたとえば、以下のように表示されます。

■フィールド属性の一覧表示
テーブル内のフィールド属性の一覧表示を行うには、mysql_list_fields()関数を使います。
結果ID = mysql_list_fields(データベース名,テーブル名,接続ID)
結果IDに対応する結果セットには、1レコードごとにフィールドに関する情報が格納されています。そのレコードからmysql_field_name()関数でテーブル名を取得し、mysql_fieldtype()関数でデータ型を取得し、mysql_field_len()関数でフィールドの長さを取得し、mysql_field_flag()関数でフラグを取得します。なお、レコード番号は0から始まります。
フィールド名 = mysql_field_name(結果ID,レコード番号)
データ型 = mysql_field_type(結果ID,レコード番号)
フィールドの長さ = mysql_field_len(結果ID,レコード番号)
フィールドのフラグ = mysql_field_flags(結果ID,レコード番号)
サンプルファイル「show_fields.php」を以下に示します。フィールド属性の一覧表示のためのユーザ定義関数show_fields()を定義し、利用しています。
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;
charset=EUC-JP">
<title>show_fields.php</title>
</head>
<body>
<?php
// データベースサーバへの接続
$db = mysql_connect('localhost','webapl','pass1234');
// フィールド属性の一覧表示の関数呼び出し(ユーザ定義関数)
show_fields('db_販売管理','tbl_商品',$db);
// データベースサーバの切断
mysql_close($db);
// ----------------------------------------------
// フィールド属性の一覧表示の関数の定義
function show_fields($db_name,$tbl_name,$db)
{
// 指定されたデータベース、テーブル内のフィールドリストの取得
$rs = mysql_list_fields($db_name,$tbl_name,$db);
// 結果セット内のレコード数の取得
$num_rows = mysql_num_fields($rs);
print "テーブル「{$tbl_name}」内のフィールド属性一覧\n";
print "<table border=1 cellpadding=0 cellspacing=0>\n";
print "<tr>\n";
print "<td align=center>フィールド名</td>\n";
print "<td align=center>データ型(長さ)</td>\n";
print "<td align=center>フラグ</td>\n";
print "</tr>\n";
// フィールドがある場合
if($num_rows > 0)
{
// 結果セット内のレコードを順次参照
for($i = 0; $i < $num_rows; $i++)
{
// フィールド名の取得
$field_name = mysql_field_name($rs,$i);
// データ型の取得
$field_type = mysql_field_type($rs,$i);
// フィールドの長さの取得
$field_len = mysql_field_len($rs,$i);
// フィールドのフラグの取得
$field_flags = mysql_field_flags($rs,$i);
// フラグがヌルなら半角スペースとする
if($field_flags == '')
{
$field_flags=' ';
}
// フィールド属性の表示
print "<tr>\n";
print "<td>{$field_name}</td>\n";
print "<td>{$field_name}({$field_len})</td>\n";
print "<td>{$field_flags}</td>\n";
print "</tr>\n";
}
}
// フィールドが無い場合
else
{
print "<tr>\n";
print "<td>フィールドはありません</td>\n";
print "</tr>\n";
}
print "</table>\n";
// 結果セットの解放
mysql_free_result($rs);
}
?>
</body>
</html>
結果はたとえば、以下のように表示されます。

|