カテゴリ: PHP 更新日: 2025/05/29

初心者向けPHP の MySQL のデータを削除する方法(DELETE 文)完全ガイド

PHP の MySQL のデータを削除する方法(DELETE 文)
PHP の MySQL のデータを削除する方法(DELETE 文)

新人と先輩の会話

新人:「PHPでMySQLのデータを削除する方法って、どうやってやるんですか?」

先輩:「データを削除するには、DELETE文を使いますよ。DELETE文を使うと、テーブル内の指定したデータを削除できます。」

新人:「DELETE文ってどうやって書けばいいんですか?」

先輩:「DELETE文の基本的な書き方を説明しますね。」

-

1. DELETE文とは?(基本的な説明)

1. DELETE文とは?(基本的な説明)
1. DELETE文とは?(基本的な説明)

DELETE文は、MySQLのテーブル内のデータを削除するためのSQL文です。例えば、あるユーザーが退会した場合、そのユーザーの情報をデータベースから削除するためにDELETE文を使います。

DELETE文の基本的な構文は次のようになります:


DELETE FROM テーブル名 WHERE 条件;

DELETE FROMは削除したいテーブルを指定し、WHEREで削除するデータの条件を指定します。WHEREを使わずにDELETE文を実行すると、テーブル内の全てのデータが削除されてしまうので注意が必要です。

2. DELETE文の基本的な書き方と構文

2. DELETE文の基本的な書き方と構文
2. DELETE文の基本的な書き方と構文

DELETE文を使うためには、まず削除するデータを特定する必要があります。例えば、ユーザーIDが1のユーザーを削除したい場合、次のようなSQL文を使います:


DELETE FROM users WHERE id = 1;

この例では、usersテーブルからidが1のユーザーを削除しています。WHEREの後に条件を指定することで、特定のデータだけを削除することができます。

もし条件を指定せずに実行してしまうと、テーブル内のすべてのデータが削除されてしまうため、WHERE句を忘れないようにしましょう。

3. mysqliを使ったDELETE文の実行方法

3. mysqliを使ったDELETE文の実行方法
3. mysqliを使ったDELETE文の実行方法

PHPのmysqliを使ってMySQLのデータを削除する方法を見ていきましょう。mysqliは、PHPでMySQLデータベースにアクセスするための拡張機能で、簡単にデータベース操作が行えます。

基本的な流れとして、まずデータベースに接続し、その後DELETE文を実行します。


<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "test_db";

// MySQLに接続
$conn = mysqli_connect($servername, $username, $password, $dbname);

// 接続確認
if (!$conn) {
    die("接続失敗: " . mysqli_connect_error());
}

// DELETE文を実行
$sql = "DELETE FROM users WHERE id = 1"; // idが1のユーザーを削除
if (mysqli_query($conn, $sql)) {
    echo "レコードが削除されました";
} else {
    echo "エラー: " . mysqli_error($conn);
}

// 接続を閉じる
mysqli_close($conn);
?>

このコードでは、usersというテーブルから、idが1のレコードを削除しています。実行後、レコードが削除されたかどうかがメッセージで確認できます。

4. PDOを使ったDELETE文の実行方法

4. PDOを使ったDELETE文の実行方法
4. PDOを使ったDELETE文の実行方法

次に、PHPのPDOを使ってDELETE文を実行する方法について説明します。PDOは、複数のデータベース管理システム(DBMS)をサポートするため、より汎用的で柔軟にデータベースを操作することができます。

PDOを使った場合、SQLインジェクション対策としてプリペアドステートメント(prepared statement)を使うことが推奨されます。以下のコード例では、PDOを使ってデータを削除します。


<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "test_db";

// PDOに接続
try {
    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
    // エラーモードを設定
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    // DELETE文を実行
    $stmt = $conn->prepare("DELETE FROM users WHERE id = :id");
    $stmt->bindParam(':id', $id); // バインド変数
    $id = 1; // idが1のユーザーを削除
    $stmt->execute();

    echo "レコードが削除されました";
} catch(PDOException $e) {
    echo "エラー: " . $e->getMessage();
}

// 接続を閉じる
$conn = null;
?>

このコードでは、PDOを使ってusersテーブルからidが1のレコードを削除しています。prepareメソッドとbindParamを使うことで、安全にデータを削除することができます。

-

5. mysqliとPDOの違い(どちらを選ぶべきか)

5. mysqliとPDOの違い(どちらを選ぶべきか)
5. mysqliとPDOの違い(どちらを選ぶべきか)

PHPでMySQLにアクセスする方法として、mysqliPDOの2つがありますが、それぞれに特徴があります。

  • mysqli:MySQL専用の拡張機能で、MySQLデータベースに特化しています。簡単に使えますが、他のデータベースに対応していません。
  • PDO:複数のデータベース管理システム(MySQL、PostgreSQL、SQLiteなど)をサポートしています。コードの移植性が高く、SQLインジェクション対策が強力です。

どちらを選ぶかは、プロジェクトの要件によります。もしMySQLだけを使う場合は、mysqliで十分ですが、複数のデータベースを使う可能性がある場合は、PDOの方が便利です。

初心者には、まずmysqliを使ってみて、後からPDOを学ぶのが良いでしょう。

6. MySQLのエラーハンドリング(DELETE文のエラー処理)

6. MySQLのエラーハンドリング(DELETE文のエラー処理)
6. MySQLのエラーハンドリング(DELETE文のエラー処理)

データベース操作を行う際、エラーが発生することがあります。特にDELETE文のようなデータを削除する操作は、予期しない結果を招く可能性があるため、エラーハンドリングが非常に重要です。

例えば、テーブル名や条件に誤りがある場合、DELETE文は失敗してエラーが発生します。エラーハンドリングをしっかり行うことで、問題の早期発見やユーザーへの適切なフィードバックが可能になります。

以下は、mysqliPDOを使った基本的なエラーハンドリングの方法です。

mysqliでのエラーハンドリング


<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "test_db";

$conn = mysqli_connect($servername, $username, $password, $dbname);

if (!$conn) {
    die("接続失敗: " . mysqli_connect_error());
}

$sql = "DELETE FROM users WHERE id = 1";

if (mysqli_query($conn, $sql)) {
    echo "レコードが削除されました";
} else {
    echo "エラー: " . mysqli_error($conn); // エラー内容を表示
}

mysqli_close($conn);
?>

mysqli_error($conn)を使うと、SQL文が失敗した場合のエラー内容を取得して表示できます。これにより、エラーが発生した原因を特定できます。

PDOでのエラーハンドリング


<?php
try {
    $conn = new PDO("mysql:host=localhost;dbname=test_db", "root", "");
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    $sql = "DELETE FROM users WHERE id = 1";
    $conn->exec($sql);

    echo "レコードが削除されました";
} catch (PDOException $e) {
    echo "エラー: " . $e->getMessage(); // エラー内容を表示
}
$conn = null;
?>

PDOExceptionを使って、エラーが発生した場合にその内容をキャッチし、表示することができます。

7. セキュリティ対策(SQLインジェクション対策)

7. セキュリティ対策(SQLインジェクション対策)
7. セキュリティ対策(SQLインジェクション対策)

SQLインジェクションとは、悪意のあるユーザーが入力フォームに不正なSQLコードを挿入して、データベースを不正に操作する攻撃手法です。DELETE文でもSQLインジェクションのリスクは存在するため、しっかりと対策を講じることが重要です。

SQLインジェクションを防ぐための基本的な方法として、プレースホルダ(パラメータ化クエリ)を使うことが推奨されます。これにより、SQL文とデータが分離され、悪意のあるコードが実行されることを防ぎます。

mysqliでのSQLインジェクション対策


<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "test_db";

$conn = mysqli_connect($servername, $username, $password, $dbname);

if (!$conn) {
    die("接続失敗: " . mysqli_connect_error());
}

// プレースホルダを使ったSQL文
$sql = "DELETE FROM users WHERE id = ?";
$stmt = mysqli_prepare($conn, $sql);

// idの値をバインド
$id = 1;
mysqli_stmt_bind_param($stmt, "i", $id); // "i"は整数を示す

if (mysqli_stmt_execute($stmt)) {
    echo "レコードが削除されました";
} else {
    echo "エラー: " . mysqli_error($conn);
}

mysqli_stmt_close($stmt);
mysqli_close($conn);
?>

上記のように、mysqli_prepareでSQL文を準備し、mysqli_stmt_bind_paramでパラメータをバインドすることで、SQLインジェクションを防ぎます。

PDOでのSQLインジェクション対策


<?php
try {
    $conn = new PDO("mysql:host=localhost;dbname=test_db", "root", "");
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    // プレースホルダを使ったSQL文
    $sql = "DELETE FROM users WHERE id = :id";
    $stmt = $conn->prepare($sql);

    // idの値をバインド
    $id = 1;
    $stmt->bindParam(':id', $id, PDO::PARAM_INT);

    $stmt->execute();

    echo "レコードが削除されました";
} catch (PDOException $e) {
    echo "エラー: " . $e->getMessage();
}
$conn = null;
?>

PDOでも同様に、プレースホルダを使ってSQLインジェクションを防ぐことができます。bindParamを使って、データの型を指定しながらパラメータをバインドします。

8. まとめとおすすめの使い方

8. まとめとおすすめの使い方
8. まとめとおすすめの使い方

この記事では、PHPを使ってMySQLのデータを削除する方法について解説しました。DELETE文は強力な機能ですが、正しく使用しないと大切なデータを失う可能性があります。以下にまとめを示します。

  • DELETE文を使ってデータを削除する際は、WHERE句で削除対象を指定することが重要です。
  • エラーハンドリングを行い、問題が発生した場合には適切に対処できるようにしましょう。
  • SQLインジェクションを防ぐために、プレースホルダを使ってパラメータ化されたクエリを実行しましょう。

また、DELETE文は取り扱いに慎重を要する操作なので、実行する前に十分なバックアップを取ることをおすすめします。データベースを操作する際は、いつでも慎重に行動しましょう。

最後に、初心者の方にはmysqliよりも、エラーハンドリングが強力なPDOを使う方が安心かもしれません。安全にデータを削除できるよう、しっかりと知識を深めていきましょう。

コメント
コメント投稿は、ログインしてください

まだ口コミはありません。

カテゴリの一覧へ
新着記事
Pythonのエラーメッセージの読み方!よくあるエラーと解決方法
PHPの関数(function)の基本を完全ガイド!初心者でもわかる使い方
Pythonの条件式でNoneを判定する方法!is None vs == None の違い
Pythonのpass文とは?一時的なコードブロックをスキップする方法
人気記事
No.1
Java&Spring記事人気No1
PHPの配列をソートする方法!sort, rsort, asort, ksortの使い方を丁寧に解説します!
No.2
Java&Spring記事人気No2
PHPとは?初心者向けにわかりやすく解説
No.3
Java&Spring記事人気No3
PHPの関数(function)の基本を完全ガイド!初心者でもわかる使い方
No.4
Java&Spring記事人気No4
PHP の文字列の基本操作(連結・切り出し・長さ)の使い方
-