簡體   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