繁体   English   中英

PHP PDO提取类返回FALSE

[英]PHP PDO fetch class returning FALSE

我具有此PHP函数,该函数获取当前登录用户的数据,或者如果访客未登录或具有无效的user_id和password_hash cookie,则返回false。 由于某些原因, $q->fetch()始终返回FALSE。

if( $_COOKIE['cuid']!='' && $_COOKIE['cuph']!='' )
{
    try
    {
        $q = $db->prepare( 'SELECT * FROM users WHERE user_id = ? AND password = ?' );
        $data = array( $_COOKIE['cuid'], $_COOKIE['cuph'] ); // id and password hash
        $q->execute($data);
        $num = count( $q->fetchAll() ); // in my case, $num is set to 1
        if( $num == 1 )
        {
            $q->setFetchMode(PDO::FETCH_CLASS, 'User');
            $user = $q->fetch(); // $user is set to FALSE for some reason
            return $user;
        } else {
            return FALSE;
        }
    }
    catch( Exception $e )
    {
        $db->rollBack();
        echo 'Error: ' . $e->getMessage();
    }
} else {
    return FALSE;
}

使用确切的数据而不是查询中的占位符运行该查询不会更改任何内容,直接在我的数据库中运行该查询会返回1行,就像应该的那样。 我检查了一下,$ num确实等于1。我不知道为什么$q->fetch()返回FALSE,所以任何指针都将不胜感激。

您已经在使用fetchAll()获取所有结果。 因此,结果集已用尽,您无法再从中获取任何结果。 您只希望$q->rowCount()对行进行计数fetchAll()返回的数组保存在某个地方,以便以后使用。

如前所述,您不能在一次查询后使用fetchAll然后进行fetch; 但是rowCount不能用于选择。 解决方案可以是:

您可以使用fetchAll在数组中获得结果:

$results=$q->fetchAll()

然后,您可以获取和使用或检查电话号码,例如:

echo count( $results);

并获取并使用结果,例如:

foreach ($results as $result)
{
   var_dump($result);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM