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

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

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

6.8 レコードの追加

■テーブルへのデータの入力

 テーブルへデータを入力するには、テーブルにレコードを順次追加する操作になります。レコードの追加には「INSERT INTO」文を使います。1回に1レコードのみ追加できます。

INSERT INTO テーブル名
        (フィールド名1,フィールド名2,・・・,フィールド名n)
 VALUES  (値1     ,値2     ,・・・,値n);

 最初のかっこ「(・・・)」の中に、レコードの中のデータを入力するフィールド名を[,」(半角カンマ)で区切って記入します。VALUES句のあとの「(・・・)」の中に、各フィールドに入力するデータを前のかっこに記入した順番と同じ順番で記入します。つまり、フィールド名1には値1が入力され、フィールド名2には値2が順次入力されます。テーブルのすべてのフィールドにデータを入力するときは、テーブル名の直後のかっこおよびフィールド名の記述は省略できます。ただし、値の記入順は、テーブルを作成したときのフィールドの記入順にあわせる必要があります。

 また、値の記入位置には、変数を使うことも可能です。なお、値として直接文字列を記入する場合は、文字列を「'」(シングルクォーテーション)あるいは「"」(ダブルクォーテーション)で囲む必要があります。「"」(ダブルクォーテーション)で囲んだ場合は、文字列中にエスケープ記号などの特殊記号があると再評価されるので、注意が必要です。

 サンプルファイル「insert01.php」を以下に示します。

「insert01.php」

<?php
// インクルードファイルの読み込み
include "common_pgsql.php";
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-JP">
<title>insert01.php for PostgreSQL8.0</title>
</head>
<body>
<?php
// データベースに接続
$db = db_connect($dbname);
// レコードを追加するテーブル名の設定
$tbl_name = "tbl_商品表";
// テーブルの中の全レコード一覧表示
show_records($db,$tbl_name);
print "<br>\n"; // レコード追加のSQL文の作成
$str_sql = "INSERT INTO {$tbl_name}
        (商品コード,商品名 ,単価)
       VALUES
        ('2001' ,'ランチ',800);
";
// SQL文の実行
pg_query($db,$str_sql);
// SQL文の表示
print "SQL = \"" . $str_sql . "\"<br>\n";
// テーブルの中の全レコード一覧再表示
show_records($db,$tbl_name);
// データベースの切断
pg_close($db);
?>
</body>
</html>

 サンプルファイルへのアクセス例を下記に示します。

 

6.9 レコードの修正

■テーブルのデータの修正

 テーブルのデータを修正(更新)するには、SQLコマンドの「UPDATE」文を使います。

UPDATE テーブル名
 SET   フィールド名1= 値1,フィールド名2 = 値2,・・・,フィールド名n = 値n
 WHERE 更新条件;

 SET句で更新するフィールド名と更新後の値を「=」で結んで記述します。複数のフィールドを同時に更新する場合は、「,」(カンマ)で区切ります。すべてのレコードでなく条件にあったレコードのも更新する場合は、更新条件をWHERE句に記述します。

 サンプルファイル「update.php」を以下に示します。

「update.php」

<?php
// インクルードファイルの読み込み
include "common_pgsql.php";
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-JP">
<title>update.php for PostgreSQL8.0</title>
</head>
<body>
<?php
// データベースに接続
$db = db_connect($dbname);
// レコードを追加するテーブル名の設定
$tbl_name = "tbl_商品表";
// テーブルの中の全レコード一覧表示
show_records($db,$tbl_name);
print "<br>\n";
// レコード更新のSQL文の作成
$str_sql = "UPDATE {$tbl_name}
      SET 商品名 = '地方御膳',単価 = 900
      WHERE 商品コード = '1001';
";
// SQL文の実行
pg_query($db,$str_sql);
// SQL文の表示
print "SQL = \"" . $str_sql . "\"<br>\n";
// テーブルの中の全レコード一覧再表示
show_records($db,$tbl_name);
// データベースの切断
pg_close($db);
?>
</body>
</html>

 サンプルファイルへのアクセス例を下記に示します。

 

6.10 レコードの削除

■テーブルのデータの削除

 テーブルのデータを削除するには、SQLコマンドの「DELETE」文を使い該当するレコードを削除します。

DELETE FROM テーブル名
 WHERE 削除条件;

 ただ、このDELETE文は慎重に使う必要があります。一旦データを削除すると元へ戻らなくなります。条件式は慎重に確認しましょう。

 サンプルファイル「delete.php」を以下に示します。

「delete.php」

<?php
// インクルードファイルの読み込み
include "common_pgsql.php";
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-JP">
<title>delete.php for PostgreSQL8.0</title>
</head>
<body>
<?php
// データベースに接続
$db = db_connect($dbname);
// レコードを削除するテーブル名の設定
$tbl_name = "tbl_商品表";
// テーブルの中の全レコード一覧表示
show_records($db,$tbl_name);
print "<br>\n";
// レコード削除のSQL文の作成
$str_sql = "DELETE FROM {$tbl_name}
      WHERE 商品コード = '2001';
";
// SQL文の実行
pg_query($db,$str_sql);
// SQL文の表示
print "SQL = \"" . $str_sql . "\"<br>\n";
// テーブルの中の全レコード一覧再表示
show_records($db,$tbl_name);
// データベースの切断
pg_close($db);
?>
</body>
</html>

 サンプルファイルへのアクセス例を下記に示します。

 

6.11 レコードの並べ替え

■テーブルのレコードの並べ替え(ソート)

 あるフィールドの値に注目してレコードの表示順の並べ替え(ソート)を行うにはSQL文の「SELECT」文でORDER句を使います。

SELECT * FROM テーブル名
  ORDER BY  フィールド名

 ORDER BYの後のフィールド名の値にしたがって昇順(辞書順あるいは小さい方から大きい方へ)に並べ替えます。

 並べ替えを降順(辞書の逆順あるいは大きい方から小さい方へ)に並べ替えるときは、フィールド名の後に半角スペースをはさんで、「DESC]をオプションで記述します。

SELECT * FROM テーブル名
  ORDER BY  フィールド名 DESC

 サンプルファイル「order.php」を以下に示します。

「order.php」

<?php
// インクルードファイルの読み込み
include "common_pgsql.php";
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-JP">
<title>order.php for PostgreSQL8.0</title>
</head>
<body>
<?php
// データベースに接続
$db = db_connect($dbname);
// レコードを並べ替えるテーブル名の設定
$tbl_name = "tbl_商品表2";
// テーブルの中の全レコード一覧表示
show_records($db,$tbl_name);
print "<br>\n";
// レコード並べ替え(昇順)のSQL文の作成
$str_sql = "SELECT * FROM {$tbl_name}
      ORDER BY 単価;
";
// SQL文の実行
$rs = pg_query($db,$str_sql);
// SQL文の表示
print "SQL = \"" . $str_sql . "\"<br>\n";
// 結果リソースの中の全レコード一覧表示
show_rs($rs);
// 結果リソースの開放
pg_free_result($rs);
print "<br>\n";
// レコード並べ替え(降順)のSQL文の作成
$str_sql = "SELECT * FROM {$tbl_name}
      ORDER BY 単価 DESC;
";
// SQL文の実行
$rs = pg_query($db,$str_sql);
// SQL文の表示
print "SQL = \"" . $str_sql . "\"<br>\n";
// 結果リソースの中の全レコード一覧再表示
show_rs($rs);
// データベースの切断
pg_close($db);
?>
</body>
</html>

 サンプルファイルへのアクセス例を下記に示します。

 

6.12 あいまい検索

■LIKE演算子とワイルドカード文字「%」

 WHERE句で、文字列の部分一致条件を使う場合は、LIKE演算子とワイルドカード文字「%」(半角)を使います。ワイルドカード文字「%」は0文字以上の任意の文字列を意味します。

 末尾が「定食」となる商品名を含むいわゆる後方一致検索の場合は、「LIKE '%定食」のようにします'。

WHERE フィールド名 LIKE '%文字列'

 ただし、フィールドの型が固定長の場合は、フィールドの値の後ろに空白文字が付加されているので、その空白文字をtrim()関数で削除した上で評価する必要があります。

WHERE trim(フィールド名) LIKE '%文字列'

 前方一致検索の場合は、「LIKE '山%'」のようにします。

WHERE フィールド名 LIKE '文字列%'

 部分一致検索の場合は、「LIKE '%幸%'」のようにします。

WHERE フィールド名 LIKE '%文字列%'

 文字列に変数「$str」を使う場合は、変数を示す特殊文字「$」を再評価する必要があるので、「'」(シングルクォーテーション)の代わりに「"」(ダブルクォーテーション)で囲みます。変数は「{ }」で囲みます。

WHERE フィールド名 LIKE "'%{$str}%"

 サンプルファイル「like.php」を以下に示します。

「like.php」

<?php
// インクルードファイルの読み込み
include "common_pgsql.php";
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-JP">
<title>like.php for PostgreSQL8.0</title>
</head>
<body>
<?php
// データベースに接続
$db = db_connect($dbname);
// 検索対象テーブル
$tbl_name = "tbl_商品表3";
show_records($db,$tbl_name);
print "<br>\n";

// あいまい検索(LIKE演算子)
// 後方一致検索
$str_sql = "SELECT * FROM {$tbl_name}
      WHERE trim(商品名) LIKE '%定食';
";
// SQL文の実行
$rs = pg_query($db,$str_sql);
// 結果セットの中の全レコード一覧表示
print "SQL = \"{$str_sql}\"<br>\n";
show_rs($rs);
print "<br>\n";

// 前方一致検索
$str_sql = "SELECT * FROM {$tbl_name}
      WHERE 商品名 LIKE '山%';
";
// SQL文の実行
$rs = pg_query($db,$str_sql);
// 結果セットの中の全レコード一覧表示
print "SQL = \"{$str_sql}\"<br>\n";
show_rs($rs);
print "<br>\n";

// 部分一致検索
$str = '幸';
$str_sql = "SELECT * FROM {$tbl_name}
      WHERE 商品名 LIKE '%{$str}%';
";
// SQL文の実行
$rs = pg_query($db,$str_sql);
// 結果セットの中の全レコード一覧表示
print "SQL = \"{$str_sql}\"<br>\n";
show_rs($rs);
print "<br>\n"; // データベースの切断
pg_close($db);
?>
</body>
</html>

 サンプルファイルへのアクセス例を下記に示します。

■LIKE演算子とワイルドカード文字「_」

 WHERE句で、特定の長さの文字列に一致する条件を指定する場合は、ワイルドカード文字「_」(半角のアンダーバー)を使います。冒頭が「鶴亀」で4文字の商品名を含むレコードを参照する場合は、「LIKE '鶴亀_ _'」とします。(「_ _」は2個連続した半角のアンダーバーの意味です。ここでは分かりやすいように、間に半角スペースを挿入していますが、SQL文では、半角スペースは入れません)。

WHERE フィールド名 LIKE '文字列_ _'

■IN演算子

 WHERE句で、いくつかの特定の値に一致する場合の条件式には、IN演算子を使います。「1000」あるいは「1500」のいずれかに一致する場合という条件式は、「IN(1000,1500)」と記述します。

WHERE フィールド名 IN (候補値1, 候補値2,・・・,候補値n)

■BETWEEN演算子

 下限値から上限値までの間の任意の値に一致する条件式は、BETWEEN演算子を使います。

WHERE フィールド名 BETWEEN 下限値 AND 上限値

 

 以上のサンプルファイル「between.php」を以下に示します。

「between.php」

<?php
// インクルードファイルの読み込み
include "common_pgsql.php";
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-JP">
<title>between.php for PostgreSQL8.0</title>
</head>
<body>
<?php
// データベースに接続
$db = db_connect($dbname);
// 検索対象テーブル
$tbl_name = "tbl_商品表3";
show_records($db,$tbl_name);
print "<br>\n";

// あいまい検索(LIKE演算子)
// 文字列長を指定したい場合
// (鶴亀の後に任意の2文字を含む4文字の文字列を検索する例)
$str_sql = "SELECT * FROM {$tbl_name}
      WHERE trim(商品名) LIKE '鶴亀__'
;";
// SQL文の実行
$rs = pg_query($db,$str_sql);
// 結果セットの中の全レコード一覧表示
print "SQL = \"{$str_sql}\"<br>\n";
show_rs($rs);
print "<br>\n";

// IN演算子
$str_sql = "SELECT * FROM {$tbl_name}
      WHERE 単価 IN(1000,1500);
";
// SQL文の実行
$rs = pg_query($db,$str_sql);
// 結果セットの中の全レコード一覧表示
print "SQL = \"{$str_sql}\"<br>\n";
show_rs($rs);
print "<br>\n";

// BETWEEN演算子
$str_sql = "SELECT * FROM {$tbl_name}
      WHERE 単価 BETWEEN 2000 AND 2600;
";
// SQL文の実行
$rs = pg_query($db,$str_sql);
// 結果セットの中の全レコード一覧表示
print "SQL = \"{$str_sql}\"<br>\n";
show_rs($rs);
print "<br>\n";
// データベースの切断
pg_close($db);
?>
</body>
</html>

 サンプルファイルへのアクセス例を下記に示します。

 

 


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

執筆 山田豊通
更新日: 2005年11月1日