2012-12-28 61 views
1

并不是PHP新手,但只有PDO一天的时间。当然,我在这里做错了什么。PDO读取/读取所有

$query = $conn->prepare("SELECT * FROM admins WHERE username = :username AND password = :password"); 
    $query->execute(array('username' => $username,'password' => sha1($password))); 
    $result = $query->fetchAll(PDO::FETCH_ASSOC); 
    if (count($result) > 0) 
    { 
     $_SESSION['user']['who']  = $result[0]['who']; 
     $_SESSION['user']['email'] = $result[0]['email']; 
     $_SESSION['user']['username'] = $result[0]['username']; 
     echo REFRESH; 
    } 
    else 
    { 
     $message = "Invalid username/password."; 
    } 

我可以声明那些$_SESSIONS正常的唯一方法是,如果我使用$result[0]['fieldName'];如何我刚刚通过$result['fieldName'];访问它?

回答

7

fetchAll,作为文档说,检索所有的阵列同时获取数据。由于您使用的是FETCH_ASSOC,因此会获取关联数组的数组。如果您确定只有一列正在返回或仅对第一列有兴趣,请使用fetch。否则,你必须遍历fetchAll的结果或做你所做的。

+0

好的,那么**适当的**测试用例会是什么情况呢,因为如果我只用'fetch',它不会返回任何东西?首先想到的是'(!empty($ result))? // log in:// invalid' – Ronnie

+0

如果没有行,'fetch'将返回一个虚假值。你也可以检查'rowCount'。 'if($ query-> rowCount)'或'if(!$ row = $ result-> fetch())'将会执行。 –

+0

优秀...谢谢!使用获取作品 – Ronnie

-1

使用:

foreach($result as $row) 
{ 
    $_SESSION['user']['who'] = $row['who']; 
    .... and so on 
} 
+0

似乎每次都会覆盖同一个变量时使用'foreach',并且当您知道数组中只有一个元素开始时。 – Barmar

+0

确实 - 用@explosion丸方法。 – ethrbunny