前提・実現したいこと
本を見ながら、PHPを使い、mysqlにデータを送信して、更新をかけるという作業をしていたのですが、その際、エラーが出てしまい、更新ボタンを押しても、エラーメッセージが出ます。。
どこがまちがっているのでしょうか。
発生している問題・エラーメッセージ
残り発生:SQLSTATE [42000]:構文エラーまたはアクセス違反:1064SQL構文にエラーがあります。'WHERE id =?'の近くで使用する正しい構文については、MySQLサーバーのバージョンに対応するマニュアルを確認してください。1行目
該当のソースコード
PHP
1 2<?php 3$user = "〇〇"; 4$pass = "〇〇"; 5try { 6 if (empty($_GET['id'])) throw new Exception ('id不正'); 7 $id = (int) $_GET['id']; 8 $dph = new PDO('mysql:host=localhost;dbname=db1;charset=utf8', $user, $pass); 9 $dph->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 10 $dph->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 11 $sql = "SELECT * FROM recipes where id = ?"; 12 $stmt =$dph->prepare($sql); 13 $stmt->bindValue(1,$id, PDO::PARAM_INT); 14 $stmt->execute(); 15 $result = $stmt->fetch(PDO::FETCH_ASSOC); 16 $dph = null; 17} catch (Exception $e){ 18 echo "エラー発生: " . htmlspecialchars($e->getmessage(), ENT_QUOTES, 'UTF-8') . "<br>"; 19 die(); 20} 21?>
HTML
1 2<!DOCTYPE html> 3<html lang="ja"> 4 5<head> 6 <meta charset="UTF-8"> 7 <title>入力フォーム</title> 8</head> 9 10<body> 11 レシピの入力<br> 12 <form method="post" action="update.php"> 13 料理名:<input type="text" name="recipe_name" value="<?php echo htmlspecialchars($result['recipe_name'], ENT_QUOTES, 'UTF-8'); ?>"><br> 14 カテゴリ: 15 <select name="category"> 16 <option value="">選択してください</option> 17 <option value="1" <?php if ($result['category'] === 1) echo "selected"?>>和食</option> 18 <option value="2" <?php if($result['category'] === 2) echo "selected"?>>中華</option> 19 <option value="3" <?php if($result['category'] === 3) echo "selected"?>>洋食</option> 20 </select> 21 <br> 22 難易度: 23 <input type="radio" name="difficulty" value="1" <?php if ($result['difficulty']=== 1) echo "checked"?>>簡単 24 <input type="radio" name="difficulty" value="2" <?php if($result['difficulty'] === 2) echo "checked"?>>普通 25 <input type="radio" name="difficulty" value="3" <?php if($result['difficulty'] ===3) echo "checked"?>>難しい 26 <br> 27 予算: 28 <input type="number" name="budget" value="<?php echo htmlspecialchars($result['budget'], ENT_QUOTES, 'UTF-8');?>">円 29 <br> 30 作り方: 31 <textarea name="howto" cols="40" rows="4" maxlength="150"><?php echo htmlspecialchars($result['howto'], ENT_QUOTES, 'UTF-8'); ?></textarea> 32 <br> 33 <input type="hidden" name="id" value="<?php echo htmlspecialchars($result['id'], ENT_QUOTES, 'UTF-8'); ?>"> 34 <input type="submit" value="送信"> 35 36 </form> 37</body> 38 39</html>
PHP
1 2<?php 3$user = "、、"; 4$pass = ”、、"; 5 6$recipe_name = $_POST['recipe_name']; 7$howto = $_POST['howto']; 8$category = (int) $_POST['category']; 9$difficulty = (int) $_POST['difficulty']; 10$budget = (int) $_POST['budget']; 11try{ 12if (empty($_POST["id"]) )throw new Exception('id不正'); 13 $id = (int) $_POST['id']; 14 $dph = new PDO('mysql:host=localhost;dbname=db1;charset=utf8', $user, $pass); 15 $dph->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 16 $dph->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 17 $sql = "UPDATE recipes SET recipe_name = ?, category = ?, difficulty = ?, budget = ?, howto = ?, WHERE id = ?"; 18 $stmt = $dph->prepare($sql); 19 $stmt->bindValue(1, $recipe_name, PDO::PARAM_STR); 20 $stmt->bindValue(2, $category, PDO::PARAM_INT); 21 $stmt->bindValue(3, $difficulty, PDO::PARAM_INT); 22 $stmt->bindValue(4, $budget, PDO::PARAM_INT); 23 $stmt->bindValue(5, $howto, PDO::PARAM_STR); 24 $stmt->bindValue(6, $id, PDO::PARAM_INT); 25 $stmt->execute(); 26 $dph= null; 27 echo "ID:" . htmlspecialchars($id, ENT_QUOTES, 'UTF-8') . "レシピの更新が完了しました。"; 28} catch (Exception $e) { 29 echo "エラー発生: " . htmlspecialchars($e->getmessage(), ENT_QUOTES, 'UTF-8') . "<br>"; 30 die(); 31} 32?> 33
試したこと
本のコード通りに移しているはずです。。
何回か見ました。
補足情報(FW/ツールのバージョンなど)
PHP.7.4.9
MYSQL 5.7.30
brackets使用
mamp使用