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

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

新規登録して質問してみよう
ただいま回答率
85.50%
PHP

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

Q&A

解決済

3回答

30648閲覧

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

wisdom

総合スコア18

PHP

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

0グッド

2クリップ

投稿2016/03/29 04:54

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

エラー文は次のような感じです。
「 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に対して実行しようとしていることが問題のようなのですが、どうすればいいのかわからず困っています。

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

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

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

php

1print_r($db->errorInfo());

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

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

php

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

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

error_reporting = E_ALL display_errors = On

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

投稿2016/03/29 05:30

KiyoshiMotoki

総合スコア4791

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

wisdom

2016/03/29 05:40

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

2016/03/29 05:54

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

0

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

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

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

投稿2016/03/29 05:14

ShinjiOhishi

総合スコア57

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

wisdom

2016/03/29 05:39

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

0

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

投稿2016/03/29 05:10

takaki.ishibash

総合スコア120

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

wisdom

2016/03/29 05: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文に続く... ?>
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問