【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（投稿一覧）

<img width="409" alt="スクリーンショット 2019-06-30 11.48.20.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392565/0d0718a3-4cc1-a10d-7379-59f1c047db6f.png">


```php: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（編集画面）

<img width="438" alt="スクリーンショット 2019-06-30 11.48.29.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392565/a459f697-0416-2c55-821c-500d4dbba304.png">

```php: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>
```

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

<img width="403" alt="スクリーンショット 2019-06-30 11.48.57.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392565/fec6e5f1-59f8-21c3-95a7-42951129603e.png">



### update.php（更新完了画面）

<img width="328" alt="スクリーンショット 2019-06-30 11.49.05.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392565/c52ff964-c63e-eead-d2d5-01874792107d.png">


```php: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>
```

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

<img width="450" alt="スクリーンショット 2019-06-30 11.49.11.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392565/bff67268-5957-1d9e-5843-2405215b7ad5.png">

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

<img width="261" alt="スクリーンショット 2019-06-30 11.53.36.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392565/f42ae0d8-dfcc-4b5b-087a-61ad6912a75e.png">