はじめに
- 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(投稿一覧)

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(編集画面)

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>
以下のようにデータを変更して、編集する
ボタンを選択します。

update.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>
データが更新されました。

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