我准备的SQL语句出了什么问题?

时间:2011-08-16 14:26:27

标签: php mysql pdo

我是新手使用PDO和准备好的声明,所以如果我这样做是公然错误请告诉我:)

我有以下代码:

$stmt = $this->_dbh->prepare( '(SELECT folder_id, "y" AS "has_access", access_type FROM groups_users AS gu LEFT JOIN folders_groups AS fg ON gu.group_id = fg.group_id WHERE user_id = :user_id)
                        UNION
                        (SELECT folder_id, has_access, access_type FROM folders_users WHERE user_id = :user_id AND has_access = :yes)' );
$stmt->bindValue( ':user_id', $this->_user_id, PDO::PARAM_INT );
$stmt->bindValue( ':yes', self::YES, PDO::PARAM_STR );
$stmt->execute();
$folders = $stmt->fetch( PDO::FETCH_ASSOC );

如果我这样做:

print_r($this->_dbh->errorInfo());                                   
print_r($folders);

$ folders为FALSE,我的errorInfo()返回:

Array ( [0] => 00000 [1] => [2] => )

根据我的理解,这意味着没有错误。我尝试用值取代my:user_id和:yes,我没有收到错误。结果是空的但我的fetch调用仍然返回false(documentation表示它失败了)当我期待一个空数组时。

感谢您的帮助:)

1 个答案:

答案 0 :(得分:2)

返回false的fetch调用不是错误条件 - 它只是意味着没有要获取的数据。例如您的查询未返回任何数据。 $stmt->rowCount()返回什么?