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

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

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

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Q&A

解決済

2回答

1469閲覧

PHP データベース

marimokomokmOk

総合スコア52

PHP

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

0グッド

0クリップ

投稿2017/02/27 02:53

PHPでエラーが起きてしまいました。

Fatal error: Call to a member function fetchAll() on null in /home/takahashi/public_html/test29.php on line 220

http://pastebin.com/PBQYRaXd

コード

一覧表示ボタンを押したらエラーが起きてしまいました。

$pdo = new PDO('mysql:host=localhost;dbname=takahashi1;charset=utf8', 'takahashi', 'takahashi' ); $result = $pdo->query('select * from words order by id desc'); foreach ($result->fetchAll() as $row){ echo '<tr>'; // echo '<td width="30" height="35" align="center" width="110" height="35">', h($row['id']), '</td>'; echo '<td width="30" class="font3"><b>', h($row['word']), '</b></td>'; echo '<td width="150" class="font3">', h($row['sense']), '</td>'; echo '<td width="150" class="font3">', h($row['memo']), '</td>'; echo '</tr>'; echo "\n"; }


これだと一覧ボタン押したときに
全部表示されないんですか?
どうすればいいでしょうか。

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

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

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

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

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

guest

回答2

0

ベストアンサー

エラーメッセージからすると、$result(SQL SELECT の結果)が PDOStatement ではなく、false なのでしょう。(だから fetchAll などというメソッドがない)
ということであれば、そもそも query が失敗しています。
query が失敗する原因はいろいろ考えられます。

  • データベースへ正しく接続できているか
  • 使っているスキーマ(データベース)は正しいか
  • テーブル名は正しいか
  • カラム名は正しいか

まずは上にあげたものを調べてみましょう。

投稿2017/02/27 03:12

tacsheaven

総合スコア13703

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

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

marimokomokmOk

2017/02/27 03:38

ご解答下さりありがとうございます。 listDisplayを case 'listDisplay': $result = $pdo->query('select * from words order by id desc'); break; に変えたら上手くいきました。 そもそももともと、 if(!$_POST['command'] == 'search'){ $result = $pdo->query('select * from words order by id desc'); } があるのに、なぜ case 'listDisplay':に $result = $pdo->query('select * from words order by id desc'); を追加しないといけないのでしょうか。
Everatch

2017/02/27 04:04 編集

横からすみません、 !$_POST['command'] == 'search' ではなく、 $_POST['command'] != 'search' なのでは? その書き方だと !($_POST['command'] == 'search') にはならず (!$_POST['command']) == 'search' になってしまいます コード見る限り、そこでは$_POST['command']が必ず存在するので、!$_POST['command']は常にfalseになります。つまり !$_POST['command'] == 'search' は false == 'search' になり、いかなる場合において実行されることはないですね。
tacsheaven

2017/02/27 04:03 編集

if (!$_POST['command'] == 'search') これは( (!$_POST['command']) == 'search') と解釈され、!$_POST['command'] は true/false しか帰りません。よって (true/false) == 'search' になるので、常に不成立。 (!($_POST['command'] == 'search')) なら意図したとおりに動きますかね(あるいは Everatch さんのように $_POST['command'] != 'search' にする)
marimokomokmOk

2017/02/27 04:17

ご解答下さりありがとうございます。 case 'listDisplay': // $result = $pdo->query('select * from words order by id desc'); break; にして if(!($_POST['command'] == 'search')){ $result = $pdo->query('select * from words order by id desc'); } にしたら動きました。 ありがとうございます。 比較演算子について調べてみます。
marimokomokmOk

2017/02/27 04:21

if($_POST['command'] != 'search'){ でも機能しました。
guest

0

$pdo->query()した時はfetchAllしてもしなくても拾えたはず
以下ためしてみてください

PHP

1try{ 2 $dsn = 'mysql:host=localhost;dbname=takahashi1;charset=utf8'; 3 $user = 'takahashi'; 4 $password = 'takahashi'; 5 $pdo = new PDO($dsn, $user,$password); 6 $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 7 $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); 8 $stmt = $pdo->query('select * from words order by id desc'); 9 foreach ($stmt as $row){ 10 print_r($row); 11 } 12}catch(PDOException $e){ 13 die($e->getMessage()); 14}

投稿2017/02/27 03:45

yambejp

総合スコア114777

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

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

KiyoshiMotoki

2017/02/27 03:58

それをためしたところで、何の解決にもなりません。
yambejp

2017/02/27 04:06

'select * from words order by id desc'が有効なクエリーかどうかはわかるのでは? 同じような質問を繰り返しているので簡単なものから構築し直すことをお勧めしたいですね
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問