|
以下、6.3で作成したPostgreSQLデータベースのメタデータ表示用のユーザ定義関数やデータベース接続部分をインクルードファイル「common_pgsql.php」内に記述し、利用することとします。
■データベースの作成、削除
データベースの作成には、SQLコマンドの「CREATE DATABASE」文を使用します。
CREATE DATABASE データベース名;
データベースの削除には、SQLコマンドの「DROP DATABASE」文を使用します。
DROP DATABASE データベース名;
サンプルファイル「database01.php」を以下に示します。
(注)Webアプリケーションでデータベースの生成・削除を行うには、Webアプリケーション用ユーザはPostgreSQLのスーパユーザ権限を持つ必要があります。これは、セキュリティ上極めて危険なので、推奨できません。データベースの生成・削除は対話型インタフェースpsqlを使うよう推奨します。
「database01.php」
<?php
// インクルードファイルの読み込み
include "common_pgsql.php";
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;
charset=EUC-JP">
<title>database01.php for PostgreSQL8.0</title>
</head>
<body>
<?php
// データベースに接続
$db = db_connect($dbname);
// データベースの一覧表示
show_databases($db);
$dbname_new = "db_テスト";
// SQL文の設定
$str_sql = "CREATE DATABASE {$dbname_new};";
// SQL文の実行
$rs = pg_query($db,$str_sql);
// SQL文の実行がNGの場合
if(!pg_result_status($rs) == PGSQL_COMMAND_OK)
{
print "Error: failed to execute SQL.<br>\n";
exit;
}
// SQL文の実行がOKの場合
print "データベース「{$dbname_new}」を作成しました。<br>\n";
// データベースの一覧表示
show_databases($db);
// SQL文の設定
$str_sql = "DROP DATABASE {$dbname_new};";
// SQL文の実行
$rs = pg_query($db,$str_sql);
// SQL文の実行がNGの場合
if(!pg_result_status($rs) == PGSQL_COMMAND_OK)
{
print "Error: failed to execute SQL.<br>\n";
exit;
}
// SQL文の実行がOKの場合
print "データベース「{$dbname_new}」を削除しました.<br>\n";
// データベースの一覧表示
show_databases($db);
// データベースの切断
pg_close($db);
?>
</body>
</html>
サンプルファイルへのアクセス結果は次のようになります。
■SQL文の実行結果の判定
SQL文が正常に実行されたたか否かは、pg_result_status()関数で評価します。
$status = pg_result_status(結果リソース);
pg_result_status()関数は、結果リソースのステータスを返します。 結果リソースのステータスは種々ありますが、一般的には、概略以下のような戻り値となります。
PGSQL_TUPLES_OK: テーブルやビューからレコードの集合(TUPLES)を生成するSQL文が正常に生成された場合。
PGSQL_COMMAND_OK:レコードの集合(TUPLES)の生成以外のSQL文の実行が正常に実行された場合。
したがって、上のサンプルリストのように、データベースの生成削除のSQL文の実行結果が正常か否かの判定は、以下のように行います。
// SQL文の実行がNGの場合
if(!pg_result_status($rs) == PGSQL_COMMAND_OK)
{
print "Error: failed to execute SQL.<br>\n";
exit;
}
// SQL文の実行がOKの場合
SELECT文のようにレコードの集合(TUPLES)の生成を行うSQL文の実行結果が正常か否かの判定は、以下のように行います。
// SQL文の実行がNGの場合
if(!pg_result_status($rs) == PGSQL_TUPLES_OK)
{
print "Error: failed to execute SQL.<br>\n";
exit;
}
// SQL文の実行がOKの場合
■テーブルの作成
テーブルを作成するには、SQLコマンドの「CREATE TABLE」文を実行します。
CREATE TABLE テーブル名
(
フィールド名1 データ型1,
フィールド名2 データ型2,
:
PRIMARY KEY(フィールド名n)
);
テーブルを削除するには、SQL文の「DROP TABLE」文を実行します。
DROP TABLE テーブル名;
以下にサンプルファイル「create_table.php」を示します。テーブルがデータベース内に存在するかチェックするユーザ定義関数table_exists()関数を定義して使用しています。
「create_table.php」
<?php
// インクルードファイルの読み込み
include "common_pgsql.php";
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;
charset=EUC-JP">
<title>database01.php for PostgreSQL8.0</title>
</head>
<body>
<?php
// データベースに接続
$db = db_connect($dbname);
// テーブルの一覧表示
show_tables($db);
$tbl_name = "tbl_テスト";
// テーブルが存在しない場合
if(!table_exists($db,$tbl_name))
{
// テーブル作成用SQL文
$str_sql = "CREATE TABLE {$tbl_name}
(
商品コード CHAR(4),
商品名 CHAR(16),
単価 INTEGER,
PRIMARY KEY(商品コード)
);";
// SQL文の実行
pg_query($db,$str_sql);
print "テーブル「{$tbl_name}」を作成しました。<br><br>\n";
// テーブルの一覧表示
show_tables($db);
print "<br>\n";
// フィールド属性の一覧表示
show_fields($db,$tbl_name);
print "<br>\n";
}
// テーブルが存在する場合
else
{
print "テーブル「{$tbl_name}」は作成済みです。<br>\n";
}
// テーブルが存在する場合
if(table_exists($db,$tbl_name))
{
// テーブル削除用SQL文
$str_sql = "DROP TABLE {$tbl_name};";
// SQL文の実行
pg_query($db,$str_sql);
print "テーブル「{$tbl_name}」を削除しました。<br><br>\n";
// テーブルの一覧表示
show_tables($db,$db_name);
print "<br>\n";
}
// テーブルが存在しない場合
else
{
print "テーブル「{$tbl_name}」はありません。<br>\n";
}
// データベースの切断
pg_close($db);
// ----------------------------------------------
//
function table_exists($db,$table_name)
{
// テーブル一覧データの取得
$rs = pg_list_tables($db);
// レコード数の取得
$count = pg_num_rows($rs);
// レコードがある場合
if($count > 0)
{
while($arr_record = pg_fetch_assoc($rs))
{
$name = trim($arr_record['Name']);
if($name == $table_name)
{
return true;
}
}
return false;
}
else
{
return false;
}
}
?>
</body>
</html>
サンプルファイルの実行結果を下記に示します。

【注意】以後、テーブルの存在チェック関数「table_exists()」はインクルードファイル「common_pgsql.php」内に追加して記述することとします。
|