PHPプログラミング

ベストプラクティス

データベース PDO その8

PDOでデータを削除(DELETE)

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

今回はデータベースの基本操作である生成(INSERT)、参照(SELECT)、更新(UPDATE)、削除(DELETE)のうち、PDOで削除(DELETE)を行う方法です。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 = "DELETE FROM user_list WHERE id = 3";

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

上記SQLを実行するとuser_listテーブルにあるWHERE句で指定したデータが削除されます。
SQLの実行が成功するとPDOStatementオブジェクト、それ以外の場合は論理値のfalse$resに入ります。

文法エラーがなくSQLが実行されればPDOStatementオブジェクトが返ってくる点に注意してください。
例えばテーブルにそもそもデータが入っていなかったり、条件にあうデータがなく削除できなかった場合についても、文法エラーではないため返り値はPDOStatementオブジェクトです。

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

MySQLでデータを削除する

まずはMySQLからデータの削除を行います。
操作前のテーブルには次のデータが入っています。

操作前のテーブル

操作前のテーブル(MySQL)

ここでは、id3であるテスト太郎さんのデータを削除します。

先ほどのデータを削除するコードを使い、データベースの接続からコードにしていきます。
データベースの接続と解除、処理を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 = "DELETE FROM user_list WHERE id = 3";

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

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

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

削除が成功すると、テーブルの内容は次のようになります。

操作後のテーブル

操作後のテーブル(MySQL)

テスト太郎のデータがテーブルから削除されました。
以上、MySQLでのデータ削除でした。

PostgreSQLでデータを削除する

続いて、PostgreSQLでデータ削除を行います。
基本的なコードは上記MySQLと同様です。

操作前のテーブル

操作前のテーブル(PostgreSQL)

今回はid3を持つテスト四郎さんのデータを削除します。

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 = "DELETE FROM user_list WHERE id = 3";

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

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

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

操作後のテーブル

操作後のテーブル(PostgreSQL)

テスト四郎さんのデータがテーブルから削除されました。
以上、PostgreSQLでのデータ削除でした。

SQLiteでデータを削除する

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

操作前のテーブル

操作前のテーブル(SQLite)

ここでは、id3のテスト健太さんのデータを削除していきます。

index.php

<?php

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

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

	// SQL作成
	$sql = "DELETE FROM user_list WHERE id = 3";

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

} catch(PDOException $e) {

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

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

操作後のテーブル

操作後のテーブル(SQLite)

テスト健太さんのデータがテーブルから削除されました。
以上、SQLiteでのデータ削除でした。

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