无法从PDO阵列获取值

时间:2015-04-05 18:03:33

标签: php mysql pdo prepared-statement

我对PHP很新,并且一直在关注Lynda.com教程(尽管他们仍然使用mysql而不是mysqli或PDO)。

我在使用从查询中获得的数据时遇到问题。

我以我的登录页面为例,省去了连接到db部分:

$login_username = trim(htmlspecialchars($_POST['username'])); 
$password = trim(htmlspecialchars($_POST['password'])); // from login form

$stmt = $db->prepare("SELECT * FROM users 
                     WHERE username = :login_username");

$stmt->bindParam(':login_username', $login_username);
$stmt->execute();
$result = $stmt->fetch(PDO::FETCH_ASSOC);
if($stmt->rowCount() > 0 && $result = password_verify($password,$result['hashed_password'])) {
$_SESSION['logged_in_id'] = $result['id'];
$_SESSION['logged_in_username'] = $login_username; //this was the only way I could pass the username as I could not get it from $result['username']
$_SESSION['first_name'] = $result['first_name'];
$_SESSION['last_name'] = $result['last_name'];

没有任何内容传递给会话,也没有错误。我也无法回应$ result的价值。如果我只是尝试回显$ result,那么我只得到值1

请帮忙!

1 个答案:

答案 0 :(得分:1)

你的问题是:

... && $result = password_verify($password,$result['hashed_password'])

请注意,$result是一个数组,其中包含您刚刚提取的行,并且您在此处为其指定了一个新值;您正在覆盖$result变量,因此之后的所有作业都将失败。

您可能需要以下内容:

... && password_verify($password,$result['hashed_password'])

另请注意,您不应该依赖rowCount(),因为这不一定是您对SELECT语句的期望。

当您正在获取一行时,您可以执行以下操作:

 if ($result && password_verify($password,$result['hashed_password']))

如果没有结果,则永远不会检查第二个条件,因此不会导致警告或错误。