PDO fetch / fetchAll

时间:2012-12-28 21:20:32

标签: php mysql pdo

对PHP来说并不陌生,但对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'];访问它?

3 个答案:

答案 0 :(得分:9)

正如文档所说,

fetchAll同时检索所有获取数据的数组。由于您使用的是FETCH_ASSOC,因此会获取一组关联数组。如果您确定只返回了一列或只对返回的第一列感兴趣,请使用fetch。否则,您必须迭代fetchAll结果或执行您已完成的操作。

答案 1 :(得分:0)

对于“使用 foreach 似乎很愚蠢”的评论,请回过头来记住这是一个 fetchAll 命令——程序指定它希望以数组形式返回所有结果。

这个例子适用于这种情况。就目前而言,'who' 字段将设置为最后一条记录的值(以防返回多个记录)。

这实际上是一个相当普遍的结构。

答案 2 :(得分:-1)

使用:

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