目次
1. 本記事のポイント
- PHPからMySQLに対するINSERT・UPDATE・DELETEの基本構文を解説
- PDOによるSQL実行の安全な書き方とプレースホルダの使い方を紹介
- 実務上の注意点や典型的なミスも補足
2. PHPのINSERT・UPDATE・DELETEとは?
PHPでデータベース操作を行う際、INSERT・UPDATE・DELETEは「データの登録・更新・削除」を担う基本的なSQL命令です。これらを適切に扱うことで、Webアプリケーションにおけるデータ管理機能を構築できます。
実務では、PDO(PHP Data Objects)を使ったデータベース接続が推奨されており、SQLインジェクションへの対策としてプレースホルダの使用が不可欠です。
たとえば、フォームから受け取ったデータをDBに格納したり、編集機能で特定レコードを更新したり、削除ボタンでエントリを消したりと、INSERT・UPDATE・DELETEはCRUD操作の中心的な存在です。
3. 詳細解説
3.1 データを追加(INSERT)する
ユーザー登録や記事投稿など、新しいデータをDBに登録する際に使用します。
PHP
// データベース接続
$pdo = new PDO('mysql:host=localhost;dbname=testdb', 'user', 'pass');
// SQL文を用意
$sql = "INSERT INTO users (name, email) VALUES (:name, :email)";
$stmt = $pdo->prepare($sql);
// 値をバインドして実行
$stmt->execute([
':name' => '田中太郎',
':email' => 'taro@example.com'
]);
出力はありませんが、成功すると1件のデータが追加されます。
3.2 データを更新(UPDATE)する
既存レコードの一部情報を変更する処理です。
PHP
$sql = "UPDATE users SET email = :email WHERE name = :name";
$stmt = $pdo->prepare($sql);
$stmt->execute([
':email' => 'new@example.com',
':name' => '田中太郎'
]);
WHERE
句を省略すると全レコードが更新されるため、必ず条件を指定してください。
3.3 データを削除(DELETE)する
不要になったレコードを削除する際に使用します。
PHP
$sql = "DELETE FROM users WHERE name = :name";
$stmt = $pdo->prepare($sql);
$stmt->execute([':name' => '田中太郎']);
UPDATEと同様、DELETEも条件指定を怠ると全件削除になるリスクがあります。
4. よくあるミス・誤解・落とし穴
- プレースホルダを使わずに文字列を直接SQLに埋め込むと、SQLインジェクションの危険があります。
WHERE
句を省略したUPDATE/DELETEは、全件が対象となるため、バックアップなしの実行は危険です。$stmt->execute()
後の戻り値はtrue/false
で、件数取得にはrowCount()
を用います。- プレースホルダには「:key」形式の命名が必要で、対応する配列のキーとも一致している必要があります。
5. まとめ
PHPでINSERT・UPDATE・DELETEを安全に実行するには、PDOを使ったプレースホルダの活用が重要です。条件付きのSQL実行やバインド処理に慣れることで、より堅牢なアプリケーションが構築できます。
特にUPDATEやDELETEでは、WHERE
句の指定ミスが重大な事故につながるため、必ず事前チェックやテストデータでの検証を行うようにしましょう。