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

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

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

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

Q&A

解決済

3回答

1947閲覧

PHPでDBからデータを取得して表示しようするがエラーになってします

kanta_m

総合スコア16

PHP

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

1グッド

0クリップ

投稿2016/04/01 03:14

DBからデータを読み出し表示しようとするが下記のようなエラーが表示されてしまい、
エラーを修正できずに困っています。
お力を貸してください。
お願いします。

表示エラー
_____________________________________________
「Fatal error: Call to a member function fetch() on a non-object in C:\xampp\htdocs\stc\list.php on line 50」
_____________________________________________

コード
_____________________________________________
try{
$db = new PDO($dsn, $user, $password);
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES,false);
/* プリペアドミテートメントを作成 */
$stmt = $db->prepare("SELECT * FROM stc_member ORDER BY id DESC LIMIT :page, :num");

} 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>
<from action="write.php" method="post"> <p>ID:<input type="text" name = "id"> 名前:<input type="text" name= "name"> 級:<input type="text" name = "rank"> パスワード:<input type="text" name="pass"> </p> </from> <ht />
<?php while($row = $stmt->fetch()): ←☆ここが50行目 ?>
<p><?php echo $row['id'] ?> <?php echo $row['name'] ?> <?php echo $row['rank'] ?> <?php echo $row['pass'] ?> </p>

__________________________________________
テーブル
Fild Type Null kye Default
id char(5) NO PRI NULL
name varchar(255) NO NULL
rank char(1) YES NULL
pass char(4) NO NULL

m.kosuda👍を押しています

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

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

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

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

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

guest

回答3

0

ベストアンサー

いくつか問題を見つけましたので、箇条書きします。
1,2,3を確認/修正してみてください。
4は、今後問題が出る可能性があるので対応しておいた方が良いと思います。

  1. :name形式でSQLを指定していますが、$stmt->bindParamが呼ばれていません。→PDOStatement::bindParam
  2. $stmt->execute();が呼ばれていません。 → PDOStatement::execute
  3. また、PDO::prepareは失敗したときにFALSEを返すこともあるのでvar_dump($stmt);などで、オブジェクトが返っているか確認してください。
  4. Exceptionをキャッチしても処理が続いているので、$stmtundefinedになる可能性があります。(今回出ている問題とは直接関係ありません)

投稿2016/04/01 03:47

rkojima

総合スコア421

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

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

0

"表示エラー"の内容から、$db->prepareの実行に失敗していると思われます。

prepareメソッドのリファレンスの「返り値」の項にある

もしデータベースサーバーが文を準備できなかった場合、 PDO::prepare() は FALSE を返すか PDOException を発行します (エラー処理 の方法に依存します)。

という状態です。
http://php.net/manual/ja/pdo.prepare.php

ご提示のコードの

php

1echo "エラー:". $e->getMessage();

という部分に、なにか表示されていませんか?

何も表示されていないようなら、

php

1$db->setAttribute(PDO::ATTR_EMULATE_PREPARES,false);

の直後に以下の1行を追加して、もう一度実行してみてください。

php

1$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

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

ちなみに、ShunsukeIzui様の回答の通り、ご提示のコードはSQL文を実行していません。
prepareメソッドは、SQL文の実行を準備するだけです)

SQL文を実行するためには、prepareに続けて$stmt->executeを実行する必要があります。
http://php.net/manual/ja/pdostatement.execute.php

投稿2016/04/01 03:57

KiyoshiMotoki

総合スコア4791

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

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

0

SQLが実行されてないようですが、どこかで実行されてますか?

投稿2016/04/01 03:36

orange0190

総合スコア1698

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問