Windows+Apache+PHP+MySQLによるWebアプリケーション
−入門編−

第6章 MySQLによるWebアプリケーションの基礎

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='&nbsp;';
   }

   // フィールド属性の表示
   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>

 結果はたとえば、以下のように表示されます。


前へ | 目次へ |次へ  | YCポータルサイト

執筆 山田豊通
更新日: 2004年12月10日