29
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

posted at

【PDO】UPDATE文でデータを更新(編集)する方法

はじめに

  • UPDATE文でデータを更新(編集)する方法について本やネットの情報から調べて理解したことをまとめました。
  • もし、書いていることに何か間違いがある場合はご指摘いただけると嬉しいです。

データを更新(編集)するSQL文

  • データを更新(編集)するにはUPDATE文を使います。

UPDATE文の書き方

UPDATE テーブル名 SET カラム名 = 値 WHERE 条件;

UPDATE文でデータを更新(編集)のコード例

簡易掲示板を実装することを仮定して解説します。

開発環境

MAC
MAMP

ファイル

index.php
edit.php
update.php

画面

投稿一覧
編集画面
更新完了画面

以下のようなデータベースとテーブル、レコード登録されていると仮定して解説します。

データベース名: test_db6
テーブル名: users

id name message
1 waka こんにちわ

index.php(投稿一覧)

スクリーンショット 2019-06-30 11.48.20.png

index.php
<?php

try {

    $user = "ここにユーザー名が入ります";
    $password = "ここにパスワードが入ります";

    $dbh = new PDO("mysql:host=localhost; dbname=test_db6; charset=utf8", "$user", "$password");       

    $stmt = $dbh->query('SELECT * FROM users');

    $result = 0;

    $result = $stmt->fetchAll(PDO::FETCH_ASSOC);

} catch (Exception $e) {
          echo 'エラーが発生しました。:' . $e->getMessage();
}

?>
 <!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>簡易掲示板</title>
  </head>
  <body> 
      <h2>簡易掲示板</h2>
        <?php
            echo "<table>\n";
              echo "<tr>\n";
              echo "<th>お名前</th><th>メッセージ</th>\n";
              echo "</tr>\n";
              foreach ($result as $user) {
                echo "<tr>\n";
                echo "<td>" . $user["name"] . "</td>\n";
                echo "<td>" . $user["message"] . "</td>\n";
                echo "<td>\n";
                echo "<a href=edit.php?id=" . $user["id"] . ">編集</a>\n";
                echo "</td>\n";
                echo "</tr>\n";
              }
            echo "</table>\n";
        ?>
  </body>
</html>

edit.php(編集画面)

スクリーンショット 2019-06-30 11.48.29.png

edit.php

<?php

try {

    $user = "ここにユーザー名が入ります";
    $password = "ここにパスワードが入ります";

    $dbh = new PDO("mysql:host=localhost; dbname=test_db6; charset=utf8", "$user", "$password");

    $stmt = $dbh->prepare('SELECT * FROM users WHERE id = :id');

    $stmt->execute(array(':id' => $_GET["id"]));

    $result = 0;

    $result = $stmt->fetch(PDO::FETCH_ASSOC);

} catch (Exception $e) {
          echo 'エラーが発生しました。:' . $e->getMessage();
}

?>

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>編集</title>

    <div class="contact-form">
        <h2>編集</h2>
        <form action="update.php" method="post">
                <input type="hidden" name="id" value="<?php if (!empty($result['id'])) echo(htmlspecialchars($result['id'], ENT_QUOTES, 'UTF-8'));?>">
            <p>
                <label>お名前:</label>
                <input type="text" name="name" value="<?php if (!empty($result['name'])) echo(htmlspecialchars($result['name'], ENT_QUOTES, 'UTF-8'));?>">
            </p>
            <p>
                <label>メッセージ:</label>
                <input type="text" name="message" value="<?php if (!empty($result['message'])) echo(htmlspecialchars($result['message'], ENT_QUOTES, 'UTF-8'));?>">
            </p>

            <input type="submit" value="編集する">

        </form>
    </div>
        <a href="index.php">投稿一覧へ</a>
</body>
</html>

以下のようにデータを変更して、編集するボタンを選択します。

スクリーンショット 2019-06-30 11.48.57.png

update.php(更新完了画面)

スクリーンショット 2019-06-30 11.49.05.png

update.php

<?php

try {

    $user = "ここにユーザー名が入ります";
    $password = "ここにパスワードが入ります";

    $dbh = new PDO("mysql:host=localhost; dbname=test_db6; charset=utf8", "$user", "$password");

    $stmt = $dbh->prepare('UPDATE users SET name = :name, message = :message WHERE id = :id');

    $stmt->execute(array(':name' => $_POST['name'], ':message' => $_POST['message'], ':id' => $_POST['id']));

    echo "情報を更新しました。";

} catch (Exception $e) {
          echo 'エラーが発生しました。:' . $e->getMessage();
}

?>

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>更新完了</title>
  </head>
  <body>          
  <p>
      <a href="index.php">投稿一覧へ</a>
  </p> 
  </body>
</html>

データが更新されました。

スクリーンショット 2019-06-30 11.49.11.png

データベースの中身も更新されました。

スクリーンショット 2019-06-30 11.53.36.png

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
29
Help us understand the problem. What are the problem?