2012-06-17 108 views
1

制备的查询将返回以下结果集,当$this->show设置为saved-by-the-bellPDO预处理语句不返回预期的结果

season 
------ 
1 
2 
3 
4 

当我执行下面的代码:

$seasons = array(); 

$query = $db->prepare(
    "SELECT `season` " . 
    "FROM `tv` " . 
    "WHERE `show_url` = ':show' " . 
    "GROUP BY `season` " . 
    "ORDER BY `season` ASC;" 
); 

$query->bindParam(':show', $this->show); 
$query->execute(); 
$query->setFetchMode(PDO::FETCH_OBJ); 

while($row = $query->fetch()) 
{ 
    $season = new stdClass; 
    $season->number = $row->season; 
    $season->title = "Season {$row->season}"; 
    $season->url = $row->season; 

    $seasons[] = $season; 
} 

return $seasons; 

$seasons是空阵列,为什么?

$ db是扩展PDO的实例化对象。

我试过各种调试方法,但是当我回显rowCount时,它说0.我仍然是PDO的新手,但我似乎无法看到这里出现了什么问题。

在此先感谢。

+0

我猜你已经检查,看是否SQL直接从MySQL返回什么? – Robbie

+0

不是你的问题,但是,在PHP字符串中可以跨越多行。 – goat

+0

但是,我认为他们包含换行符,出于某种原因,我是肛交,不希望我的字符串有这些不必要的字符。 – Quantastical

回答

3

啊,我想明白了。我会在这里留下我的愚蠢,以防其他人发生这种情况。

显然,使用预准备语句时,您不需要用SQL代码中的引号来包装参数。

所以,准备语句应该是这样的:

$query = $db->prepare(
    "SELECT `season` " . 
    "FROM `tv` " . 
    "WHERE `show_url` = :show " . 
    "GROUP BY `season` " . 
    "ORDER BY `season` ASC;" 
); 
+1

要记住的方法是这些*绑定变量*而不是简单的字符串替换。 – Jason