2016-04-14 12 views
0

私はPDOクエリをindex.phpファイルで直接使用していました。ここでは、関数を格納する別のファイルを作成したいと思います。私は1つを作成しましたが、関数を呼び出すときには "0"しか返しません。古いバージョンでは動作します:PDOは結果を取得しません

$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); 

が、新しいバージョンではない:

別ファイル "storage.php":index.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(); 
    } 
} 

コール:試しました

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>"; 

を解決策を検索するには何も見つかりませんでした。事前に助けてくれてありがとう。

+1

'':mId' => $ row1-> team_a_id'は' ':mId' => $ row1-> match_id'であるべきですか? – Siguza

+0

正しく覚えていれば、同じプレースホルダを再利用することはできません。 –

+0

@Siguzaはい、タイプミスですが、結果は返されません。 –

答えて

-1

問題がありました。私は入力パラメータを指定していませんでした:

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(); 
    } 

これは私の問題を解決しました。