phpでPDOについての学習メモ3

やりたいこと

  • 削除ボタンが押されたデータをDBから削除する。
  • 修正した内容をDBで更新する。

    5.削除ボタンが押されたデータをDBから削除する

    まずDBに接続し、実行させるところまでは書いておく。(phpでPDOについての学習メモ1,2より参考にすること) 次に下記のように実装する。

<?php
$sql = 'DELETE FROM contact_form WHERE id = :id';
     $stmt = $pdo -> prepare($sql);
     $stmt -> bindParam(':id',$_POST['id'], PDO::PARAM_INT);
     $stmt -> execute();
?>

注意する点

  • DELETE文はSQL文なので変数はWHEREの中に直接PHP文の変数$_POST['name']とは書けない。
    $stmt->bindParam(':name',$_POST['name'],PDO::PARAM_INT);このようにSQL文の変数に代入してあげる。

6.DBをUPDATEする

DBに接続し実行させるところまでは同じ。 次に下記のコードを参考に実装する。

(edit_confirm.php)
<?php
if (isset ($_POST['id'])){
$sql = "UPDATE contact_form SET name = :name, email = :email WHERE id = :id";
$id = filter_input(INPUT_POST, "id");
    $stmt = $pdo -> prepare($sql);
    $stmt -> bindParam(':id',$id, PDO::PARAM_INT);
    $stmt -> bindParam(':name',$_POST['name'], PDO::PARAM_STR);
    $stmt -> bindParam(':email',$_POST['email'], PDO::PARAM_STR);
    $stmt -> execute();
}
?>
<html>
<head>
<body>
:(省略)
<input type="hidden" name="id" value="<?php echo $_POST['id'];?>">
:(省略)
</body>
</head>
</html>

注意する点  - SETはSET name=:name SET email=:emailみたいにカラムごとにSETを書かなくてよい。ソースコードに書いてあるようにカンマでまとめて書く。 - POSTは短期記憶なのでlist.phpからedit_form.phpにPOST送信したものをedit_form.phpでhiddenを使いワンクッション挟み、UPDATE文を書くまえにissetで受取る。