2016-04-14 2 views
0

Я использовал запросы PDO непосредственно в файле index.php. Теперь я хочу создать отдельный файл, в котором буду хранить функции. Я создал один, но когда я вызываю функцию, возвращается только «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":

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

вызов в 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>"; 

Пробовал искать решение, но ничего не мог найти. Благодарим за помощь заранее.

+1

Не следует '': mId '=> $ row1-> team_a_id' be '': mId '=> $ row1-> match_id'? – Siguza

+0

Если я правильно помню, вы не можете повторно использовать один и тот же заполнитель. –

+0

@ Сигуза да, это должно быть, опечатка, но все равно не возвращает никаких результатов. –

ответ

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

Это исправило мою проблему.

Смежные вопросы