###前提・実現したいこと
一覧画面(①)から変更画面(②)に遷移させようとしていますがエラーが出てうまくいきません。
①
②
実際の画面
①
②
###発生している問題・エラーメッセージ
Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: parameter was not defined in /home/vagrant/public_php/update2.php on line 27 Fatal error: Call to undefined method PDOStatement::bind_result() in /home/vagrant/public_php/update2.php on line 30
###該当のソースコード
①の一覧画面 update1.php
php
1<?php 2 3header("Content-type: text/html; charset=utf-8"); 4 5require_once("index_db.php"); 6 7 8$sql = "SELECT id, rank, nation, food, reason FROM country"; 9$statement = $pdo->query($sql); 10 11// 結果の取得 12$country = array(); 13foreach ($statement as $row) { 14 $country[] = $row; 15} 16var_dump($country); 17 18// データベース切断 19$pdo = null; 20 21?> 22 23<!DOCTYPE html> 24<html> 25<head> 26<title>国一覧</title> 27</head> 28<body> 29<h1>国一覧</h1> 30 31<table border='1'> 32 <tr><td>id</td><td>順位</td><td>国名</td><td>食べたい食べ物</td><td>理由</td></tr> 33 34<?php 35 foreach($country as $row){ 36 ?> 37 38 39 40 <tr> 41 <td><?=$row['id']?></td> 42 <td><?=htmlspecialchars($row['rank'], ENT_QUOTES, 'UTF-8')?></td> 43 <td><?=htmlspecialchars($row['nation'], ENT_QUOTES, 'UTF-8')?></td> 44 <td><?=htmlspecialchars($row['food'], ENT_QUOTES, 'UTF-8')?></td> 45 <td><?=htmlspecialchars($row['reason'], ENT_QUOTES, 'UTF-8')?></td> 46 <td> 47 <form action="update2.php" method="post"> 48 <input type="submit" value="編集"> 49 <input type="hidden" name="id" value="<?=$row['id']?>"> 50 <input type="hidden" name="rank" value="<?=$row['rank']?>"> 51 <input type="hidden" name="nation" value="<?=$row['nation']?>"> 52 <input type="hidden" name="food" value="<?=$row['food']?>"> 53 <input type="hidden" name="reason" value="<?=$row['reason']?>"> 54 </form> 55 </td> 56</tr> 57 58 59 60 <?php 61 } 62 ?> 63 64</table> 65 66</body> 67</html> 68
変更画面② update2.php(エラーが出てるファイル)
<?php ini_set("display_errors", On); error_reporting(E_ALL); header("content-type: text/html; charset=utf-8"); require_once("index_db.php"); try { if(empty($_POST)) { echo "<a href='update1.php'>update1.php</a>←こちらのページからどうぞ"; exit(); }else { if (!isset($_POST['id']) || !is_numeric($_POST['id']) ){ echo "idエラー"; exit(); }else { //プリペアドスタートメント $stmt = $pdo->prepare('select * from country where id=?'); if ($stmt) { //プレースホルダへ実際の値を設定する $stmt->bindParam('i', $id); $id = $_POST['id']; //クエリの実行 $stmt->execute(); //結果変数のバインド $stmt->bind_result($id, $country); //値の取得 $stmt->fetch(); //ステートメント切断 $stmt = null; }else { echo $mysqli->errno . $mysqli->error; } } } } catch (Exception $e) { echo '捕捉した例外: ', $e->getMessage(), "\n"; } ?> <iDOCTYPE html> <!DOCTYPE html> <html> <head> <title>変更画面</title> </head> <body> <p>変更してください</p> <form action="update3.php"> <input type="text" name="rank" value="<?=htmlspecialchars($rank, ENT_QUOTES, 'UTF-8')?>"> <input type="text" name="nation" value="<?=htmlspecialchars($nation, ENT_QUOTES, 'UTF-8')?>"> <input type="text" name="food" value="<?=htmlspecialchars($food, ENT_QUOTES, 'UTF-8')?>"> <input type="text" name="reason" value="<?=htmlspecialchars($reason, ENT_QUOTES, 'UTF-8')?>"> <input type="hidden" name="id" value="<?=$id?>"> <input type="submit" value="変更する"> </form> </body> </html>
エラーの意味は理解できたのですが、自分では見つけるこができませんでした。
どうかご教授いただけたら嬉しいです。
###補足情報(言語/FW/ツール等のバージョンなど)
php5.6,mysql Ver 14.14
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/08/31 12:40
2017/08/31 12:46
2017/08/31 13:09