• 締切済み

PDOでDB

PDOでDBを表示させ修正ボタンを押し別ウインドウが開き選んだデータの修正を行いたいのですがupdate2.phpでエラ-メッセージが出ます。どうやったら直りますか 下記のメッセージです Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens in C:\WWW\test\htdoes\update2.php on line 4 レコードを修正しました。 ちなみに 番号 int プライマリ-キ- 氏名 varchar 住所 varcharです 下記はソースです 一覧画面 <HTML> <HEAD> <TITLE>一覧画面</TITLE> </HEAD> <BODY> <table border="1"> <tr> <th>番号</th> <th>氏名</th> <th>住所</th> <th>操作</th> </tr> <?php $pdo = new PDO("mysql:dbname=db_test;host=localhost", "root", "admin"); $st = $pdo->query("SELECT * FROM tbl_test"); while ($row = $st->fetch()) { $ID = htmlspecialchars($row['番号']); $NAME = htmlspecialchars($row['氏名']); $ADDR = htmlspecialchars($row['住所']); echo "<tr><td>$ID</td><td>$NAME</td><td>$ADDR</td><td><a href='update.php?番号=$ID'>修正</a></td></tr>"; } ?> </table> </BODY> </HTML> アップデートの入力フォーム update.php <?php $ID = htmlspecialchars($_GET['番号']); $pdo = new PDO("mysql:dbname=db_test;host=localhost", "root", "admin"); $st = $pdo->prepare("SELECT * FROM tbl_test WHERE 番号=?"); $st->execute(array($ID)); $row = $st->fetch(); $ID = htmlspecialchars($row['番号']); $NAME = htmlspecialchars($row['氏名']); $ADDR = htmlspecialchars($row['住所']); ?> <form action="update2.php" method="post"> 番号<br> <?php echo $ID ?><br> 氏名<br> <input type="text" NAME="NAME" value="<?php echo $NAME ?>"><br> 住所<br> <input type="text" NAME="ADDR" value="<?php echo $ADDR ?>"><br> <input type="submit"> </form> アップデートの処理 update2.php <?php $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'])); ?> レコードを修正しました。 アップデートの処理 update2.phpで 最初のエラーが出ます

みんなの回答

  • maiko0318
  • ベストアンサー率21% (1483/6969)
回答No.4

PHPは知らないので。。。ごめんなさい。 update.phpの記述にならって $st->execute(array($_POST['NAME'], $_POST['ADDR'], $ID)); ではどうですか?

noname#197690
質問者

お礼

ありがとうございます まだエラーがでます Notice: Undefined variable: ID in C:\WWW\test\htdoes\update2.php on line 4 レコードを修正しました。

noname#197690
質問者

補足

悔しいですね どうやればできるのでしょうか?

  • maiko0318
  • ベストアンサー率21% (1483/6969)
回答No.3

>どう記述すればいいですか? $st->execute(array($_POST['NAME'], $_POST['ADDR'], $_POST['ID'])); でいいかな。

noname#197690
質問者

お礼

ありがとうございます エラーが変わりました Notice: Undefined index: ID in C:\WWW\test\htdoes\update2.php on line 4 レコードを修正しました。 <?php $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'])); ?> レコードを修正しました。

noname#197690
質問者

補足

updata.phpの記述が間違っているのでしょうか

  • maiko0318
  • ベストアンサー率21% (1483/6969)
回答No.2

>上を二つに >$st = $pdo->prepare("UPDATE tbl_test SET 氏名=?,住所=?WHERE 番号=?"); コンピュータの気持ちになって考えてみてください。 氏名と住所を変更するのは分かった。で、何番のデータを変更するの? ?は”3つ”ありますよね。

noname#197690
質問者

お礼

ごめんなさい。 言いたいことはわかります どう記述すればいいですか?

  • maiko0318
  • ベストアンサー率21% (1483/6969)
回答No.1

$st = $pdo->prepare("UPDATE tbl_test SET 番号=?,氏名=?,住所=?WHERE 番号=?"); $st->execute(array($_POST['NAME'], $_POST['ADDR'])); ?> 上の文は番号と氏名、住所、番号をパラメータ化していますよね。 下の文は番号と氏名、住所、番号を渡してやらなくてはいけないのに、氏名と住所だけしか 渡していないのでは?

noname#197690
質問者

お礼

ありがとうございます! 番号は主キーなので変更できないように表示のにしました 指摘ありがとうございます <?php $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'])); ?> レコードを修正しました。 上を二つにしたいのにまだ同じエラーが出ます なぜですかね

関連するQ&A