2016-06-16 12 views
-2

ブール上)(フェッチメンバ関数への呼び出しは、自分のコードである:致命的なエラー:ここ{パス}

$money = $db_con 
->prepare(" SELECT SUM(asker_amount) asker, SUM(responder_amount) responder 
      FROM money WHERE post_id = ? AND author_id = ? AND paid IS NULL") 
->execute(array($ques_id, $author_ques_id)) 
->fetch(PDO::FETCH_ASSOC); 
$asker_amount = $money['asker']; 
$responder_amount = $money['responder']; 

それが実行してこのエラーをスローしない:

Fatal error: Call to a member function fetch() on boolean in {file path} on line 5 (->fetch(...)

オクラホマどうしましたか?それをどうやって修正することができますか?

注:このクエリも同様に動作し、phpmyadminでテストしました。

+1

'execute'関数はブール値を返します:http://php.net/manual/en/pdostatement.execute.php –

+0

@pgmann' '$ money'を' '実行するために連鎖させるのではなく、 () '? – stack

+2

明らかに、ここでうまくいきません。そのプロセスのいくつかの段階で失敗し、真偽値が返されます。一般的に、決してチェーン化されたDBコールは決してチェーン化されません。それはまったく失敗することはないと想定しています。それは間違った態度です。 SQL構文が100%完璧であっても、クエリは失敗する可能性があります。 **常に**失敗を想定し、失敗を確認し(すべての段階で)、成功を楽しい驚きとして扱います。 –

答えて

2

代わりにこれを試してください。

$query = $db_con->prepare(" SELECT SUM(asker_amount) asker, SUM(responder_amount) responder 
     FROM money WHERE post_id = ? AND author_id = ? AND paid IS NULL"); 
$query->execute(array($ques_id, $author_ques_id)); 
$money = $query->fetch(PDO::FETCH_ASSOC); 
$asker_amount = $money['asker']; 
$responder_amount = $money['responder']; 

あなただけの最終fetch$money結果を代入する必要があります。

+0

'フェッチ'は' PDOS'ではなく 'PDOStatement'のメソッドです –

+0

@vp_arth申し訳ありません、それを修正しました! –

+0

、まだエラーをチェックしません。準備が失敗し、ブール値falseを返すと、その後のステートメントでは、とにかく役に立たない。 –