Call to a member function fetch() on bool in…エラーが出た時の解決方法
みなさんこんにちは!ワトスンです。
今回はfetch()関数使用時に出てきたエラーの解決方法を解説していきたいと思います。
Call to a member function fetch() on bool in...
このエラーはfetch関数に関するエラーです。
小さなミスでこのようなエラーが出ます。
今回はその一例をもとにエラーの解決方法をご紹介していきます。
この記事は一例として参考にしてもらえたらなと思います。
それでは解説していきます。
目次
エラーを解決する方法
まず先に、今回のエラーを解決した方法をご紹介していきます。
今回出てきたエラーは以下のような内容でした。
1 |
Fatal error: Uncaught Error: Call to a member function fetch() on bool in ファイルパス:123 Stack trace: #0 ...(省略)page-chat.php on line 123 |
このエラーからはfetch関数に関する何らかのエラーだということがわかります。
何らかの原因で、fetch関数が上手く使用できない際に出てくるエラーです。
なぜfetch関数が聞かなかったのでしょうか。
それはfetch関数を使用する前の「テーブルの取得」がきちんとできていなかったからです。
エラーの原因はテーブルの取得ミス
私の場合、以下のようなプログラムを組んでエラーが出ました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
<?php $ps = $db->query("SELECT * FROM ’chat-tb’ ORDER BY ban DESC"); try{ while($r = $ps->fetch()){ $beforedest = $r['dat']; $dest = strtotime($beforedest); $sour = time(); //現在の時刻 $outstr = nicetime($dest,$sour);?> <div class="chat-list"> <div class="chat-name"> <?php print "{$r['nam']}";?> </div> <div class="chat-date"> <?php echo $outstr;?> </div> <div class="chat-message"> <?php print nl2br($r['mes']); ?> </div> </div><hr> <?php } }catch(Exception $e){ echo $e->getMessage() . PHP_EOL; } ?> |
今回の原因は一番上の、
1 |
$ps = $db->query("SELECT * FROM ’chat-tb’ ORDER BY ban DESC"); |
の段階でミスが発生していました。
この部分は、「chat-tb」というテーブルから行を降順に選択するためのプログラムです。
しかし、このプログラムにはミスがありました。
とりあえずこのミスを改善します。
“SELECT * FROM ‘..’ ORDER BY ~ DESC”のミスを改善
問題があった部分は「chat-tb」テーブルを取得する際の
1 |
$ps = $db->query("SELECT * FROM ’chat-tb’ ORDER BY ban DESC"); |
の部分です。
改善前
1 |
$ps = $db->query("SELECT * FROM ’chat-tb’ ORDER BY ban DESC"); |
改善後
1 |
$ps = $db->query("SELECT * FROM `chat-tb` ORDER BY ban DESC"); |
違いに気づけたでしょうか?
1 |
’chat-tb’ |
と
1 |
`chat-tb` |
の違いです。
カンマの種類が少し違ったみたいです。
意外と気づきにくいミスだと思います。しょうもないミスでした。。
fetch関数とは
fetch関数は配列から情報を取得する関数です。
今回は
1 |
$ps = $db->query("SELECT * FROM ’chat-tb’ ORDER BY ban DESC"); |
これの$ps(「chat-tb」テーブルの降順で選択された行の情報)の配列から情報を取得しました。
より詳しくfetch関数について知りたい方は、「fetch関数とは」をご覧ください。
今回の場合はfetch関数を使用する前に、そもそもテーブルから行を取得する段階でミスが起きていたのでエラーが出ました。
fetch関数を使用してエラーが出た時は、きちんとテーブルの取得に成功しているか確認してみて下さい。
もちろん他の箇所に間違いがある場合もあります。
今回はその一例ということで記事にしてみました。
以上、ご参考なれば嬉しいです。
エラーの修正箇所の見つけ方
プログラミングをしていると必ずエラーに出くわすと思います。
そんなときはまずどんなエラーが出ているかを確認します。
今回の場合はfetch関数に関するエラーでしたので、fetch関数について調べました。
調べるとfetch関数は「テーブルの行が選択された上で情報を取得する」とわかったので、fetch関数の記述ミスをではなく、にその前の段階の「テーブルを取得」する記述に間違いがないか調べてみました。
MysqlのSQLqueryで
1 |
SELECT * FROM ’chat-tb’ ORDER BY ban DES |
を実行し、ここの段階でエラーが出たので、テーブルの取得に失敗していると気づきました。
このように、元のエラー文を確認し、エラーの原因になっている箇所を調べ、そこに書いてある記述に間違いがないか調べ、間違いがなければその前の段階でおかしなところはないかと探ってみるというふうに探していくと見つけやすいです。
参考までに。
なにか疑問点がありましたらコメントまたはTwitterのDMでご連絡ください!
以上です。