我90%确定问题出在sql语法中,但似乎无法准确找到问题所在。 sql返回正确的电子邮件,但密码返回空。我尝试在数据库中使用不同的列,但我遇到了同样的问题。
注意:密码在db。中进行哈希。
代码:
$sql = $link->prepare('SELECT email, password FROM users WHERE email=:email');
$sql->bindParam(':email', $email);
$sql->execute();
$resultemail = $sql->fetchColumn();
$resultpassword = $sql->fetchColumn(1);
if (!$resultemail){
echo "empty";
} else {
echo $resultemail;
}
if (!$resultpassword){
echo "empty";
} else {
echo "$resultpassword";
}
答案 0 :(得分:2)
每次调用fetchColumn
时,它都会移动到结果集的下一行,并从该行中获取指定的列(默认为第0列)。因此,您要将$resultemail
设置为结果第一行的第一列,将$resultpassword
设置为结果第二行的第一列。但由于查询只返回一行,因此您需要将$resultpassword
设置为false
。
您应该获取整行,并将变量设置为该行的相应列。
$row = $sql->fetch(PDO::FETCH_ASSOC);
if ($row) {
$resultemail = $row['email'];
$resultpassword = $row['password'];
if (!$resultemail){
echo "empty";
} else {
echo $resultemail;
}
if (!$resultpassword){
echo "empty";
} else {
echo "$resultpassword";
}
} else {
echo "empty";
}