最終更新日:
公開日:
レシピ
データベース PDO
PDOでデータを削除(DELETE)
データベースの基本操作である作成(INSERT)、参照(SELECT)、更新(UPDATE)、削除(DELETE)のうち、削除(DELETE)を行う方法についてMySQL、MariaDB、PostgreSQL、SQLiteの4種類のデータベースを使って解説します。
この記事のポイント
- データベースに登録されたデータを削除する
- データの削除ではプリペアドステートメントを使用する
目次
PDOを使ってデータを削除する
今回はデータベースに登録されたデータを削除する方法について解説します。
前提として、全てのデータベースにはtestというデータベースがあり、次の構造を持ったuser_listというテーブルがあることとします。
カラム名 | 型 | その他 |
---|---|---|
id | 整数 | 主キー |
name | 文字列 | |
age | 整数 | |
created_at | 日付(またはタイムスタンプ、文字列) |
PDO自体の基本的な内容については「PDOについて」を、データベースへの接続方法については「PDOを使ってデータベースへ接続」をご覧ください。
データを削除する流れを確認
今回は4種類のデータベースに対してそれぞれデータの削除をしていきますが、データベースの接続部分など一部を除いた全体的な流れは共通しています。
そこでまずは、データを削除する流れを確認しておきましょう。
以下のコードはMySQL/MariaDBのデータベースに対して、PDOでデータを削除するコードです。
idカラムが4のデータを削除します。
データを削除するコード例
<?php
// (1) 削除するデータを用意
$id = 4;
// (2) データベースに接続
$pdo = new PDO('mysql:charset=UTF8;dbname=test;host=localhost', 'username', 'password');
// (3) SQL作成
$stmt = $pdo->prepare("DELETE FROM user_list WHERE id = :id");
// (4) 登録するデータをセット
$stmt->bindParam( ':id', $id, PDO::PARAM_INT);
// (5) SQL実行
$res = $stmt->execute();
// (6) データベースの接続解除
$pdo = null;
上記SQLを実行するとuser_listテーブルにあるWHERE句で指定したidと一致する値を持つidカラムの行を削除します。
(1)では、変数$idに削除したいデータを特定するための値をセットします。
続いて(2)でPDOオブジェクトのインスタンスを作成すると同時に、データベースに接続します。
その後、prepareメソッドを使って実行するSQLをセットします。
ここではプリペアドステートメントを使うため
、直接SQLに変数$idの値をセットせず一旦プレースホルダー「:id」を設定します。
続いて(4)で、bindParamメソッドを使って(3)で書いたプレースホルダーに対して値をセットします。
ここまではSQLを実行する前準備です。
そして(5)のexecuteメソッドでいよいよSQLを実行します。
今回のSQLはDELETE文なので、指定したデータの削除を実行します。
そしてその後に(6)で変数$pdoにnullを入れてデータベースとの接続を解除し、終了です。
以上がPDOでのデータ削除の流れです。
続いて、各データベースごとに分けてみていきましょう。
MySQL / MariaDBでデータを削除する
MySQLとMariaDBのデータベースに対してデータの削除を実行します。
この2つのデータベースは互換性があるため、PDOでは同一のコードで削除を行うことができます。
操作前のテーブルには次のデータが入っていることとします。
user_list 削除前
id | name | age | created_at
----+------------+-----+------------
1 | 山田太郎 | 34 | 2021-06-24 11:20:00
2 | 山田太郎 | 33 | 2021-06-24 11:20:00
3 | 高岡幸子 | 30 | 2021-06-24 11:20:00
4 | 坂本皐月 | 30 | 2021-06-24 09:12:47
5 | テスト健太 | 30 | 2021-06-01 10:49:05
こちらのテーブルから、idカラムに4を持つ「坂本皐月」さんのデータを削除します。
PDOのコードは先ほどの流れを解説したときと同じものを使用します。
コード例
<?php
// (1) 削除するデータを用意
$id = 4;
// (2) データベースに接続
$pdo = new PDO('mysql:charset=UTF8;dbname=test;host=localhost', 'username', 'password');
// (3) SQL作成
$stmt = $pdo->prepare("DELETE FROM user_list WHERE id = :id");
// (4) 登録するデータをセット
$stmt->bindParam( ':id', $id, PDO::PARAM_INT);
// (5) SQL実行
$res = $stmt->execute();
// (6) データベースの接続解除
$pdo = null;
コードを実行して削除に成功すると、user_listテーブルは次のようになります。
user_list 削除前
id | name | age | created_at
----+------------+-----+------------
1 | 山田太郎 | 34 | 2021-06-24 11:20:00
2 | 山田太郎 | 33 | 2021-06-24 11:20:00
3 | 高岡幸子 | 30 | 2021-06-24 11:20:00
5 | テスト健太 | 30 | 2021-06-01 10:49:05
PostgreSQLでデータを削除する
PDOからPostgreSQLデータベースに入っているデータの削除を行います。
基本的なコードは上記MySQLと同様です。
操作前のテーブルには次のデータが入っていることとします。
user_list 削除前
id | name | age | created_at
----+------------+-----+------------
1 | 山田太郎 | 30 | 2021-06-25
2 | 山田太郎 | 30 | 2021-06-25
3 | 山田健太 | 26 | 2021-06-25
4 | 山田太郎3 | 30 | 2021-06-25
5 | 高岡幸子 | 26 | 2021-06-01
6 | 山田太郎4 | 35 | 2021-06-01
7 | 山田太郎4 | 35 | 2021-06-27
こちらのテーブルから、idカラムに4の値を持つ「山田太郎3」さんのデータを削除します。
MySQLのコードとの違いは赤字になっているデータベースへ接続する箇所のみです。
コード例
<?php
// (1) 削除するデータを用意
$id = 4;
// (2) データベースに接続
$pdo = new PDO('pgsql:dbname=test;options=\'--client_encoding=UTF8\';host=localhost', 'username', 'password');
// (3) SQL作成
$stmt = $pdo->prepare("DELETE FROM user_list WHERE id = :id");
// (4) 登録するデータをセット
$stmt->bindParam( ':id', $id, PDO::PARAM_INT);
// (5) SQL実行
$res = $stmt->execute();
// (6) データベースの接続解除
$pdo = null;
こちらのコードを実行すると、user_listテーブルから1件データが削除されて以下のようになります。
user_list 削除前
id | name | age | created_at
----+------------+-----+------------
1 | 山田太郎 | 30 | 2021-06-25
2 | 山田太郎 | 30 | 2021-06-25
3 | 山田健太 | 26 | 2021-06-25
5 | 高岡幸子 | 26 | 2021-06-01
6 | 山田太郎4 | 35 | 2021-06-01
7 | 山田太郎4 | 35 | 2021-06-27
SQLiteでデータを削除する
SQLiteのデータベースに対して、PDOを使ってデータの削除を実行します。
全体の流れは上記2つのデータベースと同じ内容です。
削除を実行する前に、user_listテーブルには以下のデータが入っていることとします。
user_list 更新前
1|山田太郎|30|2021-06-25 13:22:50
2|佐藤遥|26|2021-06-27 11:02:54
3|岡部倫太郎|21|2021-06-27 11:03:07
4|橋田至|18|2021-06-27 11:03:19
5|杉田咲|23|2021-06-27 11:03:33
ここから、idカラムに4の値を持つ「橋田至」さんのデータを削除していきます。
コードは赤字になっている(2)のデータベース接続とほぼ同じですが。
コード例
<?php
// (1) 削除するデータを用意
$id = 4;
// (2) データベースに接続
$pdo = new PDO('sqlite:./sqlite/test.sqlite3');
// (3) SQL作成
$stmt = $pdo->prepare("DELETE FROM user_list WHERE id = :id");
// (4) 登録するデータをセット
$stmt->bindParam( ':id', $id, PDO::PARAM_INT);
// (5) SQL実行
$res = $stmt->execute();
// (6) データベースの接続解除
$pdo = null;
こちらのコードを実行するとデータの削除が実行され、user_listテーブルは以下のようになります。
user_list 更新後
1|山田太郎|30|2021-06-25 13:22:50
2|佐藤遥|26|2021-06-27 11:02:54
3|岡部倫太郎|21|2021-06-27 11:03:07
5|杉田咲|23|2021-06-27 11:03:33