前提・実現したいこと
php勉強中の初心者です.
現在,教材を使って勉強しています.
教材に書いておるコードを入力しながら理解している最中なのですが,
データベースでわからないところが出てきました.
以下のソースコードは掲示板を作る際のテーブルデータの読み込みと表示を行うものになっています.
1つ目がtry-catchのところで上手く処理されずに以下の①のようなエラーが出てしまいます.
2つ目がデータベースのレコードを取得するためにfetch()を使うのですが,②のようなエラーが出てしまいます.おそらくレコードがないのかと思われます.(間違っていたらすいません).
自分でも試行錯誤してみましたが,わからなかったので質問させていただきました.
初めての質問で至らぬところがございますが,よろしくお願いします.
発生している問題・エラーメッセージ
①エラー:could not find driver ②Notice: Undefined variable: stmt in D:\xampp\htdocs\tennis\bbs.php on line 46 Fatal error: Uncaught Error: Call to a member function fetch() on null in D:\xampp\htdocs\tennis\bbs.php:46 Stack trace: #0 {main} thrown in D:\xampp\htdocs\tennis\bbs.php on line 46
該当のソースコード
<?php $num = 10; //データベースに接続 $dsn = 'mariadb:host = localhost; dbname = tennis; charset = utf8'; $user = 'tennisuser'; $password = 'password'; //ページが指定されているとき $page = 0; if (isset($_GET['page'])&& $_GET['page'] > 0){ $page = intval($_GET['page']) - 1; } try{ $db = new PDO($dsn, $user, $password); $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); $stmt = $db->prepare( "SELECT * FROM bbs ORDER BY date DESC LIMIT:page, :num" ); //パラメータの割り当て $page = $page * $num; $stmt->bindParam(':page', $page, PDO::PARAM_INT); $stmt->bindParam(':num', $num, PDO::PARAM_INT); //クエリの実行 $stmt->execute(); } catch (PDOException $e){ echo "エラー:".$e->getMessage(); } ?> <html> <head> <meta http-equiv = "Content - Type" content = "text/html; charset = UTF-8"> <title>掲示板</title> </head> <body> <h1>掲示板</h1> <p><a href = "index.php">トップページに戻る</a></p> <form action="write.php" method = "post"> <p>名前:<input type = "text" name = "title"></p> <p>タイトル:<input type = "text" name= "title"></p> <textarea name = "body"></textarea> <p>削除パスワード(数字4桁):<input type = "text" name = "pass"></p> <p><input type = "submit" value ="書き込む"></p> </form> <hr /> <?php while ($row = $stmt->fetch()): $title = $row['title'] ? $row['title'] : '(無題)'; ?> <P>名前:<?php echo $row['name'] ?></P> <p>タイトル:<?php echo $title ?></p> <p><?php echo nl2br($row['body'],false) ?></p> <p><?php echo $row['date'] ?></p> <form action = "delete.php" method = "post"> <input type = "hidden" name = "id" value = "<?php echo $row ['id']; ?>"> 削除パスワード:<input type = "password" name ="pass"> <input type ="submit" value = "削除"> </form> <?php endwhile; //ページ数の表示 try{ $stmt = $db->prepare("SELECT COUNT(*) FROM bbs"); //クエリの実行 $stmt->execute(); } catch (PDOException $e){ echo "エラー:".$e->getMessage(); } //コメント件数を取得 $comments = $stmt->fetchColumn(); //ページ数を計算 $max_page = ceil($comments / $num); echo '<p>'; for($i = 1; $i == $max_page; $i++){ echo '<a href = "bbs.php?page =' . $i . '">' . $i. '</a>nbsp'; } echo '</p>'; ?> </body> </html>
試したこと
教材のソースコードでは
//データベースの接続での
$dsn = 'mysql:...utf8';となっていましたがエラーが出ていたので,
$dsn = 'mariadb:...utf8';と書き換えました.
そうすると,上記のエラーが新しく発生してしまいました.
補足情報(FW/ツールのバージョンなど)
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/12/10 16:13
2019/12/10 20:15