PHPプログラミング

最終更新日:
公開日:

レシピ

データベース SQLite

SQLiteのデータを削除する:DELETE

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

この記事のポイント

  • SQLiteのデータベースに登録されているデータを削除する
  • データを削除する方法はSQLite3クラスを使う方法、PDOを使う方法がある
  • データを削除するときはプリペアドステートメントを使う

目次

データを削除する

SQLiteのデータベースに登録されているデータを削除する方法について、SQLite3クラスを使う方法とPDOを使う方法をそれぞれ解説します。

今回は次のようなテーブル「test_table」がすでにあることを前提に進めていきます。

テーブル名:test_table
カラム名その他
idINTEGERPRIMARY KEY
nameTEXTNOT NULL
ageINTEGERNOT NULL
created_datetimeTIMESTAMPDEFAULT (datetime(CURRENT_TIMESTAMP,’localtime’))

Note

テーブルの作成方法については別記事「SQLiteにテーブルを作成する:CREATE TABLE」をご覧ください。

test_tableには次のようなデータが登録されていることとして、この中のデータを削除していきます。

test_tableのデータ一覧

1|山田|30|2022-05-19 14:02:04
2|石川|32|2022-05-19 23:04:25
3|佐藤|34|2022-05-19 23:04:48
4|高橋|36|2022-05-20 00:45:53
5|和田|38|2022-05-20 01:11:23

SQLite3クラスでデータを削除する

まずはSQLite3クラスを使って、SQLiteのデータベースに登録されているデータを削除する方法を解説します。

以下のコードは(1)削除するデータを特定するためのidカラムを用意し、(2)データベースに接続して(3)削除するSQLを作成、そして(4)プリペアドステートメントによる削除の準備と(5)データを削除、(6)削除したデータの行数を確認して(7)データベースの接続を解除するという流れになっています。

index.php

// (1)削除するデータのidカラムを用意
$id = 3;

// (2)データベースに接続
$db = new SQLite3("./sqlite/test.db");

// (3)SQL作成
$stmt = $db->prepare("DELETE FROM test_table
	WHERE
		id = :id
");

// (4)削除するデータをセット
$stmt->bindValue( ':id', $id, SQLITE3_INTEGER);

// (5)SQL実行
$stmt->execute();

// (6)削除したデータのカラム数を取得
var_dump($db->changes()); // int(1)

// (7)データベースの接続解除
$db->close();

(3)のSQLを作成するタイミングでは、SQLに値を直接記入せずに「:id」のようなプレースホルダーを記述しています。
プレースホルダーは続く(4)のbindValueメソッドで値をセットします。
プリペアドステートメントを使わない方法でも削除することは可能ですが、SQLインジェクション対策含めて安全性の観点から特別な理由がない限りはプリペアドステートメントを使用にした方が無難です。

bindValueメソッドの第1パラメータは値をセットする先のプレースホルダー、第2パラメータはセットする値、そして第3パラメータはセットする値の型を用意された定数で指定します。
第3パラメータで指定する値の型の定数は以下の5種類から該当する定数を指定します。

定数名値の型
SQLITE3_INTEGER整数(値の大きさに応じて1,2,3,4,6,8バイトで格納)
SQLITE3_FLOAT浮動小数点数(8バイトのIEEE浮動小数点数値で格納)
SQLITE3_TEXT文字列(データベースのエンコーディングで格納)
SQLITE3_BLOBblobデータ(入力をそのままの形式で格納)
SQLITE3_NULLNULL

今回は整数の値を持つidカラムのプレースホルダーに値をセットするため、定数はSQLITE3_INTEGERを指定します。

(5)でexecuteメソッドを実行すると、プリペアドステートメントで用意した内容が実行され、データベースから該当するデータを削除します。

今回はidカラムで削除するデータを絞っているため、(6)のchangesメソッドでは削除に成功すると整数の1、もし該当するデータが見つからなかったときは整数の0が返ってきます。
このメソッドの戻り値を確認することで、削除に成功したかを判断することができます。

上記のコードを実行すると、テーブルに登録されているデータのうちidカラム3のデータが削除されます。

test_tableのデータ一覧

1|山田|30|2022-05-19 14:02:04
2|石川|32|2022-05-19 23:04:25
4|高橋|36|2022-05-20 00:45:53
5|和田|38|2022-05-20 01:11:23

PDOでデータを削除する

続いて、PDOを使ってSQLiteのデータベースに登録されたデータを削除します。
以下のコードの基本的な流れはSQLite3クラスと同様です。

今回はidカラム5のデータを削除します。

index.php

// (1)削除するデータのidカラムを用意
$id = 5;

// (2)データベースに接続
$pdo = new PDO('sqlite:./sqlite/test.db');

// (3)SQL作成
$stmt = $pdo->prepare("DELETE FROM test_table
	WHERE
		id = :id
");

// (4)削除するデータをセット
$stmt->bindParam( ':id', $id, PDO::PARAM_INT);

// (5)SQL実行
$res = $stmt->execute();

// (6)削除したデータのカラム数を取得
var_dump($stmt->rowCount()); // int(1)

// (7)データベースの接続解除
$pdo = null;

(4)のプリペアドステートメントでプレースホルダーに値をセットするときに、第3パラメータで指定する型の定数名はPDO用のものに置き換わります。

定数名値の型
PDO::PARAM_BOOLBool型
PDO::PARAM_INT整数
PDO::PARAM_STR文字列
PDO::PARAM_NULLNULL

(6)ではrowCountメソッドで削除した行数を取得して削除が成功したかを確認します。
今回は削除するデータをidカラムで一意に絞っているため、削除が成功すると整数の1、該当するデータが見つからない場合などの理由で削除が実行されなかったときは整数の0を返します。

上記のコードを実行すると、テーブルに登録されているデータは以下のように更新されます。

test_tableのデータ一覧

1|山田|30|2022-05-19 14:02:04
2|石川|32|2022-05-19 23:04:25
4|高橋|36|2022-05-20 00:45:53

以上、SQLiteのデータベースに登録されたデータを更新する方法でした。