Внимание, а теперь правильный ответ
public function query($sql, $params = NULL){
$sth = $this->dbh->prepare($sql);
$sth->execute($params); // <----
return $sth;
}
Это базовая функция, которая должна использоваться при выполнении ВСЕХ запросов.
В том числе запросов на вставку, обновление и удаление, а также запросов, которые при всем желании не могут вернуть объект. Например
$db->query("DELETE FROM t WHERE id=?", [$id]);
$count = $db->query("SELECT count(*) FROM t")->fetchColumn();
В принципе, этого уже достаточно, поскольку для получения списка объектов можно написать
$list = $db->query("SELECT count(*) FROM t")->fetchAll(\PDO::FETCH_CLASS, "class");
Но если прям так очень хочется, то можно засунуть этот код в хелпер-функцию
public function listObjects($sql, $class, $params){
return $this->query($sql, $params)->fetchAll(\PDO::FETCH_CLASS, $class);
}