PHPプログラミング

ベストプラクティス

データベース PDO その7

PDOでデータを更新(UPDATE)

  • このエントリーをはてなブックマークに追加

今回はデータベースの基本操作である生成(INSERT)、参照(SELECT)、更新(UPDATE)、削除(DELETE)のうち、PDOで更新(UPDATE)を行う方法です。MySQL、PostgreSQL、SQLiteの3種類のデータベースを使いながら解説します。

目次

  1. #  PDOを使ってデータを更新する
  2. #  データを更新する流れを確認
  3. #  MySQLでデータを更新する
  4. #  PostgreSQLでデータを更新する
  5. #  SQLiteでデータを更新する

PDOを使ってデータを更新する

今回はデータベースに登録されたデータを取得する方法について解説します。
次のような方が対象です。

  • データベースに登録したデータを更新したい
  • データベースのデータを更新する基本的なSQLを確認したい

前提として、全てのデータベースには「test」データベースがあり、次の構造を持ったテーブルがあることとします。

テーブル名:user_list
カラム名 その他
id 整数 主キー
name 文字列
age 整数
registry_datetime 日付(またはタイムスタンプ、文字列)

PDO自体の基本的な内容については「PDOについて」を、データベースへの接続方法については「PDOを使ってデータベースへ接続」をご覧ください。

データを更新する流れを確認

これから3種類のデータベースにあるデータをそれぞれ更新していきますが、今回は基本的なSQLのみ扱うため、全て同じSQL文が適用できます。
そこでまずは、データ更新の部分のみ確認しておきましょう。

データを取得するコード例

// SQL文を作成
$sql = "UPDATE user_list SET age = 20 WHERE id = 5";

// クエリ実行(データを取得)
$res = $dbh->query($sql);

上記SQLを実行するとuser_listテーブルにあるWHERE句で指定したデータが、SET句の内容に更新されます。
SQLの実行が成功するとPDOStatementを返し、それ以外の場合は論理値のfalseが入ります。

テーブルにデータが入っていなかったり、条件にあうデータがなく更新できなかった場合についても、文法エラーがなくSQLが実行されればPDOStatementオブジェクトを取得します。

更新の流れを確認したところで、続いてそれぞれのデータベース別に更新処理を行なっていきましょう。

MySQLでデータを更新する

まずはMySQLからデータの更新を行います。
更新前は次のようなデータが入っています。

更新前のテーブル

更新前のテーブル(MySQL)

ここでは、id5であるテスト健太さんのageを更新します。

先ほどのデータを更新するコードを使って、データベースの接続からコードにしていきます。
DBの接続と解除、データベースの処理をtry文で囲む部分については「PDOを使ってデータベースへ接続」で使ったものをそのまま使っています。

index.php

<?php

// 変数の初期化
$sql = null;
$res = null;
$dbh = null;

try {
	// DBへ接続
	$dbh = new PDO("mysql:host=127.0.0.1; dbname=test; charset=utf8", 'username', 'password');

	// SQL作成
	$sql = "UPDATE user_list SET age = 25 WHERE id = 5";

	// SQL実行
	$res = $dbh->query($sql);

} catch(PDOException $e) {
	echo $e->getMessage();
	die();
}

// 接続を閉じる
$dbh = null;

データの更新が成功すると、次のようにテーブル内のデータが更新されます。

更新後のテーブル

更新後のテーブル(MySQL)

テスト健太さんのage24から25へ更新されました。
以上、MySQLでのデータ更新でした。

PostgreSQLでデータを更新する

続いて、PostgreSQLでデータ更新を行います。
基本的にコードはMySQLと同様です。

更新前のテーブル

更新前のテーブル(PostgreSQL)

今回はid4を持つテスト五郎さんのage15に変更します。

index.php

<?php

// 変数の初期化
$sql = null;
$res = null;
$dbh = null;

try {
	// DBへ接続
	$dbh = new PDO("pgsql:host=127.0.0.1; dbname=test;", 'username', 'password');

	// SQL作成
	$sql = "UPDATE user_list SET age = 15 WHERE id = 4";

	// SQL実行
	$res = $dbh->query($sql);

} catch(PDOException $e) {
	echo $e->getMessage();
	die();
}

// 接続を閉じる
$dbh = null;

更新後のテーブル

更新後のテーブル(PostgreSQL)

テスト五郎さんのage16から15へ更新されました。
データの更新に合わせ、並びも変わっています。

以上、PostgreSQLでのデータ更新でした。

SQLiteでデータを更新する

最後にSQLiteでデータの更新を行います。
全体の流れは上記2つのデータベースと同じ内容です。

更新前のテーブル

更新前のテーブル(SQLite)

ここでは、id5であるテストあゆみさんのageを更新していきます。

index.php

<?php

// 変数の初期化
$sql = null;
$res = null;
$dbh = null;

try {
	// DBへ接続
	$dbh = new PDO("sqlite:./sqlite/test.sqlite3");

	// SQL作成
	$sql = "UPDATE user_list SET age = 22 WHERE id = 5";

	// SQL実行
	$res = $dbh->query($sql);

} catch(PDOException $e) {

	echo $e->getMessage();
	die();
}

// 接続を閉じる
$dbh = null;

更新後のテーブル

更新後のテーブル(SQLite)

テストあゆみさんのage21から22へ更新されました。
以上、SQLiteでのデータ更新でした。

  • このエントリーをはてなブックマークに追加