PHPプログラミング

レシピ

データベース PostgreSQL

PostgreSQLでデータを更新(UPDATE)

PostgreSQLデータベースのテーブルにあるデータを更新する方法について、「PostgreSQL関数」と「PDO」の2パターンを解説します。

この記事のポイント

  • PostgreSQL関数を使ってデータを更新する
  • PDOを使ってデータを更新する

目次

テーブルにあるデータを更新する

今回はテーブルに存在するデータを更新していきます。

ここでは「カフェのメニュー」を題材にして、次のようなテーブルを想定して進めていきます。

テーブル名:menu
カラム名その他
idINT(11)主キー
nameVARCHAR(20)
priceINT(11)
modify_datetimeDATETIME
create_datetimeDATETIME

id」はデータを管理する上で便利な一意となるID、「name」と「price」はメニュー名と価格、そして最後の2つはデータ更新日と登録日を示します。
また、テーブルには次のようなデータが登録されていることを前提に進めます。

テーブル内に登録されたデータ

データの更新方法について、「PostgreSQL関数」と「PDO」の2通りの方法を確認していきます。

PostgreSQL関数でデータを更新する

PostgreSQL関数を使って更新する方法は「pg_query関数」を使う方法と、「pg_update関数」の2通りあります。
2つの違いはSQL文を必要とするかどうか。
pg_query関数はSQL文を指定する必要がありますが、pg_update関数はデータさえあれば不要です。
コードの方がイメージしやすいと思うので、1つずつ見ていきましょう。

pg_query関数

pg_query関数は更新以外にデータの新規登録、削除などでも使うことができる汎用性の高い関数ですが、その代わりSQL文を指定する必要があります。

SQLのUPDATE文の基本構造は次のようになります。

UPDATE文の基本形

UPDATE テーブル名 SET カラム名 = 登録したいデータ WHERE 更新するデータを特定する条件式」が基本の形です。

SETの後ろに続く「カラム = 登録したいデータ」で複数のデータを更新したい場合、「,(コンマ)」で区切って指定します。
WHERE句の後ろに続く条件式も同様です。

実際にコードをみていきましょう。
今回は「カフェオレ」の価格を480円から550円に変更します。

コード例

<?php
// Initialize
$res = null;
$pg_conn = null;
$sql = null;
$date = null;

date_default_timezone_set('Asia/Tokyo');
$date = date("Y-m-d");

$pg_conn = pg_connect("host=localhost port=5432 dbname=test user=testuser password=testtest");

if( $pg_conn ) {

	$sql = "UPDATE menu SET price = 550, modify_datetime = '$date' WHERE id = 2";

	$res = pg_query( $pg_conn, $sql);
	var_dump(pg_result_status($res));
	
} else {
	var_dump("接続できませんでした");
}

pg_close($pg_conn);

実行結果

更新前のデータ

更新前のデータ

更新後のデータ

更新後のデータ

解説

上記のSQLではカフェオレに該当するデータを更新するために、WHERE句で「id」に「2」を持つデータのみを更新しています。
更新内容は「price(価格)」と「modify_datetime(更新日)」の2つ。
SQL実行前に現在の日時を$dateへ格納し、その内容を登録しています。

扱うデータの型が「文字列型」の場合、値を「」で囲ってあげる必要があります。整数型(int)は囲っても問題ありませんが、必須ではないので囲まなくても大丈夫です。

$resの中にはqueryメソッドから返される結果オブジェクトが入ります。
SQLクエリの実行がうまくいったかを判断するには、pg_result_status関数を使って確認することができます。
実行が正常に終了した場合は「1 (int型)」、文法エラーなどで失敗した場合は「false」が入ります。

pg_update関数

pg_update関数はデータの更新のみを行うことができる関数です。
用途は更新のみですが、SQL文が不要なため扱いやすいことが特徴。
主に、次の4つのパラメータを指定して使います。

pg_update関数の基本的なコード例

pg_update( DBオブジェクト, テーブル名, 更新するデータ, 更新対象の条件);

1つ目はDBに関するオブジェクト、2つ目は更新データのあるテーブル名を指定します。

3つ目、4つ目のパラメータは更新後のデータと、更新対象を絞り込むためのデータをそれぞれ指定します。

5つ目のパラメータとしてオプションを指定することも可能ですが、ここでは割愛します。
詳しくはphp.netをご覧ください。
pg_update関数 – php.net

返り値は更新に成功したら「true」を、失敗したら「false」を返します。

実際にコードを確認していきましょう。
カフェオレの価格を「700」へ更新するコードです。

コード例

<?php
// 変数の初期化
$res = null;
$pg_conn = null;
$sql = null;
$date = null;

date_default_timezone_set('Asia/Tokyo');
$date = date("Y-m-d");

$pg_conn = pg_connect("host=localhost port=5432 dbname=test user=testuser password=testtest");

if( $pg_conn ) {

	// 更新するデータを絞り込む条件
	$key = array(
		'id' => 2
	);

	// 更新後のデータ
	$data = array(
		'price' => 700,
		'modify_datetime' => $date
	);

	// クエリ実行
	var_dump(pg_update( $pg_conn, 'menu', $data, $key));
	
} else {
	var_dump("接続できませんでした");
}

pg_close($pg_conn);

解説

$keyには更新するデータを絞り込む条件を指定しています。
今回はカフェオレの価格を更新したいので、「id」に「2」と指定します。

もう1つの配列$dataには更新後のデータを格納しています。
価格を「700」、そして更新日が実行した日付となるようにセットしています。

これらの値をpg_update関数へ渡して実行することでデータベースの値が更新されます。
成功した場合は「boolean true」が、失敗した場合は「boolean false」を表示して終了です。

PDOでデータを更新する

PDOを使ってデータを登録する場合は、上記のpg_query関数と同様にSQL文を作成して実行します。
PDOオブジェクトのインスタンス作成、データベースへの接続については「PostgreSQLデータベースへ接続」で解説している方法と同じコードを使います。

データを更新するSQL文を作成して、queryメソッドを実行してみましょう。

コード例

<?php
// 変数の初期化
$res = null;
$pdo_conn = null;
$sql = null;
$date = null;

// 現在の日付を取得
date_default_timezone_set('Asia/Tokyo');
$date = date("Y-m-d");

try {
	$pdo_conn = new PDO( 'pgsql:host=localhost; dbname=test;', 'testuser', 'testtest' );	

	// データを更新
	$sql = "UPDATE menu SET price = 600, modify_datetime = '$date' WHERE id = 2";

	$res = $pdo_conn->query( $sql);
	var_dump($res);

} catch(PDOException $e) {

	var_dump($e->getMessage());
}

// 接続を切断
$pdo_conn = null;

成功した場合は次のように実行したSQL文が出力され、失敗した場合はfalseが出力されます。

実行結果

object(PDOStatement)[2]
  public 'queryString' => string 'UPDATE menu SET price = 600, modify_datetime = '2017-04-26' WHERE id = 2' (length=72)

解説

SQL文自体は上記「PostgreSQL関数でデータを更新する」の中で作成したものと基本的には同じ内容です。
金額のみ「600」に変更しています。
このSQL文はPostgreSQL以外のデータベースでも使うことができます。

こちらの記事は役に立ちましたか?

ありがとうございます。
もしよろしければ、あわせてフィードバックや要望などをご入力ください。

ありがとうございます。
コメントを送信しました。