PHPプログラミング

最終更新日:
公開日:

レシピ

データベース PDO

PDOでデータを削除(DELETE)

データベースの基本操作である作成(INSERT)、参照(SELECT)、更新(UPDATE)、削除(DELETE)のうち、削除(DELETE)を行う方法についてMySQL、MariaDB、PostgreSQL、SQLiteの4種類のデータベースを使って解説します。

この記事のポイント

  • データベースに登録されたデータを削除する
  • データの削除ではプリペアドステートメントを使用する

目次

PDOを使ってデータを削除する

今回はデータベースに登録されたデータを削除する方法について解説します。

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

テーブル名: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)で変数$pdonullを入れてデータベースとの接続を解除し、終了です。

以上が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