- ベストアンサー
問題解決:PHP PDOデータベースのレコード修正でエラーが発生し修正が反映されない
- PHPのPDOを使用してデータベースのレコードを修正する際にエラーが発生し、修正内容が反映されない状況になっています。
- update.phpでGETで取得した番号のデータを表示し、uptate2.phpのフォームに送信して修正を行っていますが、修正が正常に行われていないようです。
- 詳細な原因は不明ですが、問題の箇所はupdate2.phpのSQL文が正しく実行されないことが考えられます。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
その他の回答 (3)
- ok-rjak
- ベストアンサー率52% (70/134)
> ここから氏名と住所が空白だったらエラーメッセージを出したいのでが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; } ?>
お礼
ありがとうございます 未入力だと 住所を入力してくだざい レコードを修正しましたと表示されます <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> どこにレコード修正しましたを入れれば直したときだけ出ますか?
補足
すいませんできました
- ok-rjak
- ベストアンサー率52% (70/134)
> $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; }
お礼
ありがとうございます 順序が違ってました。 ここから氏名と住所が空白だったらエラーメッセージを出したいのでがtryで出せばいいですか
- Yune-Kichi
- ベストアンサー率74% (465/626)
executeの引数の順序がUPDATE文とあっていないのではないでしょうか。
お礼
ありがとうございます 順番が違ってました
お礼
ありがとうございます 参考にします