PHPの学習で、簡易な掲示板を作成していたのですが、エラーが発生してしまい、解決できない状況です。どなたかご助言頂けましたら幸いです。
以下は自分が作成したコードになります。
php
1<?php 2//1ページに表示される数 3 $num = 10; 4 $dsn = 'mysql:host=localhost;dbname=tennis;charset=utf8'; 5 $user = 'tennisuser'; 6 $password = 'password'; 7 8 $page = 0; 9 if(isset($_GET['page']) && $_GET['page'] > 0){ 10 $page = intval($_GET['page'])-1; 11 } 12 try{ 13 $db = new PDO($dsn,$user,$password); 14 $db->setAttribute(PDO::ATTR_EMULATE_PREPARES,false); 15 $stmt = $db->prepare("SELECT * FROM bbs ORDER BY date DESC LIMIT 16 :page, :num"); 17 $page = $page * $num; 18 $stmt->bindParam(':page',$page,PDO::PARAM_INT); 19 $stmt->bindParam(':num',$num,PDO::PARAM_INT); 20 $stmt->execute(); 21 }catch(PDOException $e){ 22 echo "エラー:" . $e->getMessage(); 23 } 24?> 25<html> 26 <head> 27 <meta http-equiv="Content-Type" content="text/html; 28 charset=UTF-8"> 29 <title>掲示板</title> 30 </head> 31 <body> 32 <h1>掲示板</h1> 33 <p><a href="index.php">トップページに戻る</a></p> 34 <form action="write.php" method="post"> 35 <p>名前:<input type="text"name="name"></p> 36 <p>タイトル:<input type="text" name="name"></p> 37 <textarea name="body"></textarea> 38 <p>削除パスワード(数字4桁):<input type="text" name="pass"></p> 39 <p><input type="submit" value="書き込む"></p> 40 </form> 41 <hr> 42 <?php 43 while($row = $stmt->fetch()): 44 $title = $row['title'] ? $row['title'] : '(無題)'; 45 ?> 46 <p>名前:<?php echo $row['name'] ?></p> 47 <p>タイトル:<?php echo $title ?></p> 48 <p><?php echo nl2br($row['body'],false) ?></p> 49 <p><?php echo $row['date'] ?></p> 50 <form action="delete.php" method="post"> 51 <input type="hidden" name="id" value="<?php echo $row 52 ['id']; ?>"> 53 削除パスワード:<input type="password" name="pass"> 54 <input type="submit" value="削除"> 55 </form> 56 57 58 59 60<?php 61 endwhile; 62 63 try{ 64 $stmt = $db->prepare("SELECT COUNT(*) FROM bbs"); 65 $stmt->execute(); 66 }catch(PDOException $e){ 67 echo "エラー:" . $e->getMessage(); 68 } 69 70 $comments = $stmt->fetchColumn(); 71 $max_page = ceil($comments / $num); 72 echo '<p>'; 73 for($i = 1;$i <= $max_page;$i++){ 74 echo '<a href="bbs.php?page=' . $i . '">' . $i . '</a> '; 75 } 76 echo '</p>'; 77 78?> 79 80 81 </body> 82</html> 83
エラーの内容は以下の通りです。
「Fatal error: Uncaught Error: Call to a member function bindParam() on bool in C:\xampp\xampp\htdocs\tennis\bbs.php:18 Stack trace: #0 {main} thrown in C:\xampp\xampp\htdocs\tennis\bbs.php on line 18」
bbs.phpの18行目が原因なのではないかと、見直してみたのですが、つづりのミスなどは見当たらなかった為、原因が分からずご質問させていただきました。
よろしくお願いします。
※追記です。以下のコードはご回答者様に教えて頂きました点などを、コードに加えて変更したコードです。
php
1 2<?php 3//1ページに表示される数 4 $num = 10; 5 $dsn = 'mysql:host=localhost;dbname=tennis;charset=utf8'; 6 $user = 'tennisuser'; 7 $password = 'password'; 8 9 $page = 0; 10 if(isset($_GET['page']) && $_GET['page'] > 0){ 11 $page = intval($_GET['page'])-1; 12 } 13 try{ 14 $db = new PDO($dsn,$user,$password); 15 $db->setAttribute(PDO::ATTR_EMULATE_PREPARES,false); 16 $db->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); 17 $stmt = $db->prepare(" SELECT * FROM `bbs` ORDER BY `date` DESC LIMIT 0,1"); 18 $page = $page * $num; 19 20 //$stmt->bindValue("page",$page,PDO::PARAM_INT); 21 //$stmt->bindValue("num",$num,PDO::PARAM_INT); 22 $stmt->execute(); 23 }catch(PDOException $e){ 24 echo "エラー:" . $e->getMessage(); 25 } 26?> 27<html> 28 <head> 29 <meta http-equiv="Content-Type" content="text/html; 30 charset=UTF-8"> 31 <title>掲示板</title> 32 </head> 33 <body> 34 <h1>掲示板</h1> 35 <p><a href="index.php">トップページに戻る</a></p> 36 <form action="write.php" method="post"> 37 <p>名前:<input type="text"name="name"></p> 38 <p>タイトル:<input type="text" name="name"></p> 39 <textarea name="body"></textarea> 40 <p>削除パスワード(数字4桁):<input type="text" name="pass"></p> 41 <p><input type="submit" value="書き込む"></p> 42 </form> 43 <hr> 44 <?php 45 while($row = $stmt->fetch()): 46 $title = $row['title'] ? $row['title'] : '(無題)'; 47 ?> 48 <p>名前:<?php echo $row['name'] ?></p> 49 <p>タイトル:<?php echo $title ?></p> 50 <p><?php echo nl2br($row['body'],false) ?></p> 51 <p><?php echo $row['date'] ?></p> 52 <form action="delete.php" method="post"> 53 <input type="hidden" name="id" value="<?php echo $row 54 ['id']; ?>"> 55 削除パスワード:<input type="password" name="pass"> 56 <input type="submit" value="削除"> 57 </form> 58 59 60 61 62<?php 63 endwhile; 64 65 try{ 66 $stmt = $db->prepare("SELECT COUNT(*) FROM bbs"); 67 $stmt->execute(); 68 }catch(PDOException $e){ 69 echo "エラー:" . $e->getMessage(); 70 } 71 72 $comments = $stmt->fetchColumn(); 73 $max_page = ceil($comments / $num); 74 echo '<p>'; 75 for($i = 1;$i <= $max_page;$i++){ 76 echo '<a href="bbs.php?page=' . $i . '">' . $i . '</a> '; 77 } 78 echo '</p>'; 79 80?> 81 </body> 82</html> 83
追記です。
今、テーブルの構造をコマンドプロンプトで見てみたのですが、「date」カラムがありませんでした。。。
テーブルを作成する際に、dateカラムを作成し忘れていたのかもしれません...
回答6件
あなたの回答
tips
プレビュー