PHP入門 | PDOを使ったデータベースアクセス | PDOでテーブルデータを削除・更新する

そのほかに必要な作業として、レコードの削除、そして既存レコードの内容を更新する作業がある。これについても整理して説明する。

レコードの削除

delete from テーブル where 条件

削除はdelete from テーブルという形で実行する。しかし、これだけでは指定したテーブルのレコードをすべて削除してしまうため、「どのレコードを削除するのか」という情報を追加する必要がある。そのために必要な構文が、検索でも使用したwhereである。

where条件を設定すると、条件に合うレコードを検索し、それを削除する。条件設定を変更すると、予期せずレコードを削除してしまうことがあるため注意が必要である。

実際の使用例として、以下に「名前を指定してレコードを削除する」コードを書いてみよう。

index.phpの送信フォーム

        <table>
        <form method="post" action="./remove.php">
            <tr><td>検索語:</td><td><input type="text" name="name"></td></tr>
            <tr><td></td><td><input type="submit" value="送信"></td></tr>
        </form>
        </table>

remove.php

<?php
$name = htmlspecialchars($_POST['name']);
try {
    $pdo = new PDO("mysql:host=localhost:3306;dbname=mysampledata;charset=utf8", "root","1234");
    $query = "delete from sampletable where name = '$name'";
    $pdo->exec($query);
    //echo $query;
} catch(PDOException $e){
    echo "<html><body><h1>ERR:" . $e->getMessage() + "</h1></body></html>";
}
$pdo = null;
header('Location: index.php');

index.phpにフォームを用意しておき、そこに削除するレコードの名前を入力すると、その名前のレコードを削除する。

レコードの更新

update テーブル set カラム =  where 条件

レコードの更新にはupdate テーブルを使用する。更新内容はsetの後に、カラム名と設定値をカラム = 値のように等号で記述する。複数のカラムを変更する場合は、それらをカンマで区切って続けて書く。例えば、set name = 'foo', mail = 'foo@ foo'のような形である。

そして、このupdateも「どのレコードの内容を更新するのか」をwhere条件で指定する。すると、検索されたレコードのカラムがsetで指定した内容に変更される。複数のレコードが検索されると、そのカラムがすべて指定した値に変更されてしまうため、検索条件を間違えないようにしなければならない。

 

これで、レコードの作成、検索、更新、削除といった基本的な作業ができるようになった。ざっと読み返すと分かるように、操作の多くは「PHP」よりも「SQLクエリ」で動作している。PDOで行っているのは、単に「SQLクエリを実行する」ことに過ぎない。

本格的にデータベースを利用したい人は、PDOについてはもちろん、「SQLの使い方」についてもしっかり学ぶ必要がある。SQLをうまく扱えるようになれば、PDO利用の基本はほぼマスターしたと言っても過言ではない。