2016-04-14 19 views
0

Ich benutzte PDO Abfragen direkt in index.php file.Now möchte ich separate Datei erstellen, wo ich Funktionen speichern werde. Ich habe eine erstellt, aber wenn ich Funktion aufrufen, gibt nur "0" zurück. Alte Version funktioniert:PDO ruft keine Ergebnisse ab

$abfrage11 = "SELECT COUNT(e.event_id) as numgoals 
FROM event e 
WHERE (e.match_id = '$row1->match_id' AND e.team_id = '$row1->team_a_id' AND e.eventtype IN ('soc_G','soc_PG')) OR 
     (e.match_id = '$row1->match_id' AND e.team_id = '$row1->team_b_id' AND e.eventtype = 'soc_OG')"; 
$ergebnis11 = $dbh->query($abfrage11); 
$row11 = $ergebnis11->fetch(PDO::FETCH_OBJ); 

aber in der neuen Version nicht:

separate Datei "storage.php":

class StorageAccess 
{ 
    /** @var PDO */ 
    public $db; 

    /** 
    * @param $db 
    */ 
    public function __construct($db) 
    { 
     $this->db = $db; 

    } 
public function getAbfrage11() 
    { 
     $query = "SELECT COUNT(e.event_id) as numgoals 
        FROM event e 
        WHERE (e.match_id = :mId AND e.team_id = :tmA AND e.eventtype IN ('soc_G','soc_PG')) OR 
          (e.match_id = :mId2 AND e.team_id = :tmB AND e.eventtype = 'soc_OG')"; 
     $statement = $this->db->prepare($query); 
     $statement->execute([ 
      ':mId' => $row1->match_id, 
      ':mId2' => $row1->match_id, 
      ':tmA' => $row1->team_a_id, 
      ':tmB' => $row1->team_b_id, 
     ]); 
     return $statement->fetchObject(); 
    } 
} 

Anruf in index.php:

require_once("dblogin.php"); 
require_once("Storage.php"); 

$dbFactory = new RepositoriesFactory(); 
$dbh = $dbFactory->getDataBaseInstance('admgsa_gsa'); 
$storage_access = new StorageAccess($dbh); 

$row11 = $storage_access->getAbfrage11(); 
echo "<span class='live-monitor-8' style=\"$goalscbgcolor\">$row11->numgoals</span>"; 

Versuchte nach der Lösung zu suchen, konnte aber nichts finden. Vielen Dank für die Hilfe im Voraus.

+1

Sollte nicht '': mId' => $ row1-> team_a_id' sei' ': mId' => $ row1-> match_id'? – Siguza

+0

Wenn ich mich richtig erinnere, können Sie den gleichen Platzhalter nicht wiederverwenden. –

+0

@Siguza ja sollte es sein, Tippfehler, aber gibt immer noch keine Ergebnisse zurück. –

Antwort

-1

Got was war das Problem. Ich habe keinen Eingabeparameter angegeben:

public function getAbfrage11($row1) 
    { 
     $query = "SELECT COUNT(e.event_id) as numgoals 
        FROM event e 
        WHERE (e.match_id = :mId AND e.team_id = :tmA AND e.eventtype IN ('soc_G','soc_PG')) OR 
          (e.match_id = :mId2 AND e.team_id = :tmB AND e.eventtype = 'soc_OG')"; 
     $statement = $this->db->prepare($query); 
     $statement->execute([ 
      ':mId' => $row1->match_id, 
      ':mId2' => $row1->match_id, 
      ':tmA' => $row1->team_a_id, 
      ':tmB' => $row1->team_b_id, 
     ]); 
     return $statement->fetchObject(); 
    } 

Das behob mein Problem.

Verwandte Themen