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

Php 如果没有匹配行,如何验证数据,php,mysqli,Php,Mysqli,我像这样从数据库中获取数据 while ($row = mysqli_fetch_array($select_user_query)){ $userId = $row ['id']; $check_email = $row ['userEmail']; $check_password = $row ['userPassword']; } 然后比较输入的细节是否与从数据库中获取的细节匹配 if ($email === $check_email || $hashed_pas

我像这样从数据库中获取数据

while ($row = mysqli_fetch_array($select_user_query)){
    $userId = $row ['id'];
    $check_email = $row ['userEmail'];
    $check_password = $row ['userPassword'];
}
然后比较输入的细节是否与从数据库中获取的细节匹配

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

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

} else {

   // header ("Location: ../signup.php");
    echo "failed";
}
但问题是,如果输入的电子邮件地址在数据库中不存在,它将返回错误

注意:未定义变量:签入电子邮件 第37行C:\xampp2\htdocs\诚实\包含\login\u process.php

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


所以问题是,这里的最佳实践是什么?如果是空的,是否应将默认值设置为
$check\u email

来自查询的check\u email参数为空,因此在将其分配给另一个变量(即

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

来自查询的check_email参数为null,因此在将其分配给另一个变量(即

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

假设
userEmail
是唯一的,您的表被命名为“user\u 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';
}

假设
userEmail
是唯一的,您的表被命名为“user\u 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';
}


如果没有行,那么,
$row
将为
false
<代码>如果($row&&$email===$check\u email&$hashed\u password===$check\u password)@Phil Yes,它就工作了。谢谢,你能将此作为答案发布并解释一下吗?如果你不介意,你也意识到如果你的语句中有多行,这将只检查结果集中的最后一行。在比较之前检查$check_email是否已设置-如果(isset($check_email)){}另外,你的逻辑不正确,你应该测试和,如果没有行,则if语句中的not或
$row
将为
false
<代码>如果($row&&$email===$check\u email&$hashed\u password===$check\u password)@Phil Yes,它就工作了。谢谢,你能将此作为答案发布并解释一下吗?如果你不介意,你也意识到如果你的语句中有多行,这将只检查结果集中的最后一行。在比较之前检查$check_email是否已设置-如果(isset($check_email)){}另外,你的逻辑不正确,你应该测试和,不是或者在if语句中,这只会触发未知索引错误,而不是实际上,不是。如果userEmail行存在,它将获得从query返回的值。如果没有行,则
$row
将为
false
,并且肯定不会有
userEmail
索引,不用说,我欠你一个道歉。PHP似乎在尝试访问布尔值的数组索引时表现得很奇怪,它不会触发任何警告。演示~这只会触发一个未知的索引错误,事实上,不会。如果userEmail行存在,它将获得从query返回的值。如果没有行,则
$row
将为
false
,并且肯定不会有
userEmail
索引,不用说,我欠你一个道歉。PHP似乎在尝试访问布尔值的数组索引时表现得很奇怪,它不会触发任何警告。演示~