• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:php pdo データベース)

問題解決:PHP PDOデータベースのレコード修正でエラーが発生し修正が反映されない

このQ&Aのポイント
  • PHPのPDOを使用してデータベースのレコードを修正する際にエラーが発生し、修正内容が反映されない状況になっています。
  • update.phpでGETで取得した番号のデータを表示し、uptate2.phpのフォームに送信して修正を行っていますが、修正が正常に行われていないようです。
  • 詳細な原因は不明ですが、問題の箇所はupdate2.phpのSQL文が正しく実行されないことが考えられます。

質問者が選んだベストアンサー

  • ベストアンサー
  • agunuz
  • ベストアンサー率65% (288/438)
回答No.3
noname#197690
質問者

お礼

ありがとうございます 参考にします

その他の回答 (3)

  • ok-rjak
  • ベストアンサー率52% (70/134)
回答No.4

> ここから氏名と住所が空白だったらエラーメッセージを出したいのでがtryで出せばいいですか try~catchは例外が発生した場合に、エラーを補足するために使用します。 未入力などのエラーチェック機構は自分で実装する必要があります。 ※以下は簡易例です。 update2.php <?php $err = ""; if(empty($_POST['NAME'])) $err.= "名前を入力してください。<br>"; if(empty($_POST['ADDR'])) $err.= "住所を入力してください。<br>"; if(empty($err)){  $pdo = new PDO("mysql:dbname=db_test;host=localhost", "root", "admin");  $st = $pdo->prepare("UPDATE tbl_test SET 氏名=?,住所=?WHERE 番号=?");  $st->execute(array($_POST['NAME'], $_POST['ADDR'],$_POST['ID'])); }else{  echo $err; } ?>

noname#197690
質問者

お礼

ありがとうございます 未入力だと 住所を入力してくだざい レコードを修正しましたと表示されます <html> <body> <blockquote> <?php $err = ""; if(empty($_POST['NAME'])) $err.= "名前を入力してください。<br>"; if(empty($_POST['ADDR'])) $err.= "住所を入力してください。<br>"; if(empty($err)){ $pdo = new PDO("mysql:dbname=db_test;host=localhost", "root", "admin"); $st = $pdo->prepare("UPDATE tbl_test SET 氏名=?,住所=?WHERE 番号=?"); $st->execute(array($_POST['NAME'], $_POST['ADDR'],$_POST['ID'])); }else{ echo $err; } ?> <br> レコードを修正しました <br><br><br> <a href="http://localhost/top.php"> <input type = "submit" value = "一覧に戻る" style ="WIDTH: 150px; HEIGHT: 40px"></A> </blockquote> </body> </html> どこにレコード修正しましたを入れれば直したときだけ出ますか?

noname#197690
質問者

補足

すいませんできました

  • ok-rjak
  • ベストアンサー率52% (70/134)
回答No.2

> $st = $pdo->prepare("UPDATE tbl_test SET 氏名=?,住所=?WHERE 番号=?"); そのままコピペしているのでしたら、「住所=?」と「WHERE」の間はスペースを空けないとだめですね。 > $st->execute(array($_POST['ID'],$_POST['NAME'], $_POST['ADDR'])); それと、バインドする値の順序が違うような・・・ $st->execute(array($_POST['NAME'], $_POST['ADDR'], $_POST['ID'])); 明確にするなら、プレースホルダとbindValue()などを使う方がいいと思います。 $st = $pdo->prepare("UPDATE tbl_test SET 氏名 = :name, 住所 = :addr WHERE 番号 = :id"); $st->bindValue(':name', $_POST['NAME']); $st->bindValue(':addr', $_POST['ADDR']); $st->bindValue(':id', $_POST['ID']); $st->execute(); そもそも、エラーを補足できるように、try~catchを使う方がいいです。 try{  $pdo = new PDO("mysql:dbname=db_test;host=localhost", "root", "admin");  $st = $pdo->prepare("UPDATE tbl_test SET 氏名 = :name, 住所 = :addr WHERE 番号 = :id");  $st->bindValue(':name', $_POST['NAME']);  $st->bindValue(':addr', $_POST['ADDR']);  $st->bindValue(':id', $_POST['ID']);  $st->execute(); }catch(PDOException $e){  echo $e->getMessage();  exit; }

noname#197690
質問者

お礼

ありがとうございます 順序が違ってました。 ここから氏名と住所が空白だったらエラーメッセージを出したいのでがtryで出せばいいですか

回答No.1

executeの引数の順序がUPDATE文とあっていないのではないでしょうか。

noname#197690
質問者

お礼

ありがとうございます 順番が違ってました