无法从 PDO 数组中获取值
Unable to get value from a PDO array
我是 PHP 的新手,一直在关注 Lynda.com 教程(尽管他们仍然使用 mysql 而不是 mysqli 或 PDO)。
我在使用从查询中获得的数据时遇到问题。
我将使用我的登录页面作为示例,省略连接到数据库部分:
$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
请帮忙!
您的问题是:
... && $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']))
如果没有结果,则永远不会检查第二个条件,因此不会导致警告或错误。
我是 PHP 的新手,一直在关注 Lynda.com 教程(尽管他们仍然使用 mysql 而不是 mysqli 或 PDO)。
我在使用从查询中获得的数据时遇到问题。
我将使用我的登录页面作为示例,省略连接到数据库部分:
$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
请帮忙!
您的问题是:
... && $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']))
如果没有结果,则永远不会检查第二个条件,因此不会导致警告或错误。