質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.48%

  • PHP

    20879questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

phpのデータベース連携がうまくいかず困っています。

解決済

回答 3

投稿

  • 評価
  • クリップ 1
  • VIEW 7,181

wisdom

score 14

データベースとの連携部分を勉強しております。
参考書を読みながら実行しているのですが、エラー文が出てしまいます。

エラー文は次のような感じです。
「 Fatal error: Call to a member function bindParam() on boolean 」 
in /Applications.....bbs.php on line 25


エラーとなる部分は次のコードです。

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;
25行目→  $stmt->bindParam(':page', $page, PDO::PARAM_INT);
              $stmt->bindParam(':num', $num, PDO::PARAM_INT);

    $stmt->execute();
  } catch(PDOException $e){
    echo "エラー:" . $e->getMessage();
  }


調べたところ、25行目のbindParamメソッドがbooleanに対して実行しようとしていることが問題のようなのですが、どうすればいいのかわからず困っています。

念の為ソースコードをコピペしてからの実行も行いましたがエラーとなり動きませんでした。
本からもこの部分の説明が省かれています。
止まってしまっているのでどなたか助言ください。宜しくお願いします!

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

checkベストアンサー

+3

何らかの理由で$db->prepareメソッドの実行に失敗しているため、変数$stmtFALSEが代入されているためです。
http://php.net/manual/ja/pdo.prepare.php

prepareメソッドの直後に以下の1行を追加して、エラーメッセージを確認してみて下さい。

print_r($db->errorInfo());

http://php.net/manual/ja/pdo.errorinfo.php

あと、以下はPHPで「うまく動きません」系のご質問をされる方全員に申し上げていることですが、
開発中はプログラムの先頭に以下の2行を追加するか、

error_reporting(E_ALL);
ini_set('display_errors', '1');

php.iniファイルに以下を設定して、全てのエラーメッセージを出力するようにして下さい。

error_reporting = E_ALL
display_errors = On

これらを設定しておけば、何かおかしなことが起きたときにすぐ気づけるようになりますので。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/03/29 14:40

    コードまで載せてくださりありがとうございます。
    下記のようなエラー文が出ました、
    Array ( [0] => 42S02 [1] => 1146 [2] => Table 'trunk.bbs' doesn't exist )
    これはテーブルが作成されていませんよ、というメッセージでしょうか。
    ちょっと調べて作成して実行してみます。
    ありがとうございます。

    キャンセル

  • 2016/03/29 14:54

    table名が本の内容と異なっていたために発生していたという確認漏れのエラーでした。
    エラー文を表示させたことで、確認漏れが発見できたので解決できました。ありがとうございました!!

    キャンセル

0

とりあえず変数の中身を見てみましょうか!
echo $page;

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/03/29 14:31

    fatal errorなので$page echoにしても表示されませんでした。泣
    下記のように記したので、$page=0;ですよね。
    こちらが関係しているのでしょうか・・・?知識がなくすいません。
    ヒントをください。
    よろしくお願いいたします。


    $num = 10;
    $dsn = 'mysql:host=localhost;dbname=trunk;charset=utf8';
    $user = 'trunk';
    $password = 'trunk';

    --------------------------
    <?php
    $page = 0;
    if (isset($_GET['page']) && $_GET['page'] > 0){
    $page = intval($_GET['page']) -1;
    }
    ----------------------
    以下try文に続く...

    ?>

    キャンセル

0

エラーは
bindParam を読み込もうとしたけど、そもそも存在してませんよ。

と言ってます。
参考書を読みながら実行されているのでしたら、
bindParam  メソッドをどこかのファイルで作成してるはずです。多分。

よって.bindParam のメソッドを書いているファイルを指定してあげる必要があります。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/03/29 14:39

    bindParamファイルを作るページはありませんでした。
    ただ、書き込む際のphpファイルを作った時にbainParamが登場しているのでそちらが関係しているのでしょうか・・・?
    他の回答者様のコードを実行した他ところ、テーブルがないと表示されたのでそれが原因なのでしょうかね。確認してみます。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.48%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • PHP

    20879questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。