如果没有匹配的行,如何验证数据

时间:2017-02-27 03:19:50

标签: php mysqli

我正在从数据库中获取数据

while ($row = mysqli_fetch_array($select_user_query)){
    $userId = $row ['id'];
    $check_email = $row ['userEmail'];
    $check_password = $row ['userPassword'];
}

然后我比较输入的详细信息是否与从db获取的详细信息匹配。

if ($email === $check_email || $hashed_password ===  $check_password) {

   // header ("Location:../dashboard.php");
    echo "success";

} else {

   // header ("Location: ../signup.php");
    echo "failed";
}

但问题是,如果输入的电子邮件地址在数据库中不存在,则会返回错误

  

注意:未定义的变量:check_email in   第37行的C:\ xampp2 \ htdocs \ honest \ includes \ _ login_process.php

但是,如果电子邮件存在,则返回成功。

所以问题是,这里的最佳做法是什么?如果它是空的,我应该将默认值设置为$check_email吗?

2 个答案:

答案 0 :(得分:1)

来自查询的check_email参数为null,因此在将其分配给另一个变量之前需要进行空检查,即

$check_email = $row['userEmail'] != null ? $row['userEmail'] : '';

答案 1 :(得分:1)

假设userEmail是唯一的,您的表名为" user_table"并且$conn是您的mysqli连接/实例,您可以检查匹配的行如此...

$stmt = $conn->prepare(
    'SELECT `id` FROM `user_table` WHERE `userEmail` = ? AND `userPassword` = ? LIMIT 1');
$stmt->bind_param('ss', $email, $hashed_password);
$stmt->execute();

$stmt->bind_result($userId);
if ($stmt->fetch()) {
    echo 'success';
    // $userId is also set to the result `id` now
} else {
    echo 'failed';
}