2016-06-16 4 views
-2

Hier ist mein Code:Fatal error: Call auf eine Elementfunktion holen() auf boolean in {path}

$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']; 

Es wird nicht ausgeführt und wirft diesen Fehler:

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

Ok Was ist los mit dir? Und wie kann ich es reparieren?

Hinweis: Diese Abfrage funktioniert auch, ich habe es in phpmyadmin getestet.

+1

Die 'execute' Funktion gibt einen booleschen Wert zurück: http://php.net/manual/en/pdostatement.execute.php –

+0

@pgmann Meinst du, ich muss' $ money' holen, anstatt es zu 'execute' zu ​​verketten() '? – stack

+2

Offensichtlich funktioniert es hier NICHT gut, da ein Teil dieses Prozesses fehlschlägt und einen booleschen False zurückgibt. Im Allgemeinen, niemals EVER Kette DB so anruft. Es wird angenommen, dass nichts jemals scheitern wird, was genau die falsche Einstellung ist. Abfragen können fehlschlagen, selbst wenn die SQL-Syntax zu 100% perfekt ist. ** Nimm IMMER ** Fehler an, überprüfe auf Fehler (in jedem Stadium) und behandle den Erfolg als angenehme Überraschung. –

Antwort

2

Versuchen Sie es stattdessen.

$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']; 

Sie sollten nur $money das Ergebnis der endgültigen fetch werden zuweisen.

+0

'holen 'ist eine Methode von' PDOStatement', nicht 'PDO' –

+0

@vp_arthb Sorry, repariere es! –

+0

und überprüft immer noch nicht auf Fehler. Wenn die Vorbereitung fehlschlägt und Boolean false zurückgibt, ist eine nachfolgende Anweisung sowieso nutzlos. –

Verwandte Themen