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利用の基本はほぼマスターしたと言っても過言ではない。