对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'];
访问它?
答案 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
}