我正在用php学习PDO准备语句。
我有一些错误。
public function check_user_validation($user_email,$user_password)
{
$salt1 = "5g;;";
$salt2 = "466UU$%jjh";
$user_password = hash("sha512",$salt1.$user_password.$salt2);
$result = $this->con->prepare("select id from user_table where user_email=:user_email&& user_password=:user_password");
$result->execute([
':user_email' => '$user_email',
':user_password' => '$user_password',
]);
$result = $result->rowCount();
if($result > 0)
{
$_SESSION['user_email'] = $user_email;
header("Location:dashboard.php");
}
else
{
return FALSE;
}
}
BUt它返回false。身份证和密码机器人是真实的。我认为rowCount()
赋予它0
的价值。
答案 0 :(得分:1)
$result->execute([
':user_email' => $user_email,
':user_password' => $user_password,
]);
您需要删除单引号以传递变量 $ user_email 和 $ user_password 。
答案 1 :(得分:1)
PDO::rowCount
不能保证适用于SELECT
语句。最好尝试从查询中获取数据。您还有一个问题,就是将绑定参数用单引号引起来,这将意味着查询中的值是$user_email
而不是例如me@example.com
。
$result = $this->con->prepare("select id from user_table where user_email=:user_email&& user_password=:user_password");
$result->execute([
':user_email' => $user_email,
':user_password' => $user_password,
]);
if ($result->fetchColumn() !== false)
{
$_SESSION['user_email'] = $user_email;
header("Location:dashboard.php");
}
else
{
return FALSE;
}