MySQL条件检查

标签 mysql

我如何构造此查询验证,以便它独立验证电子邮件和密码。因此,如果用户输入正确的电子邮件,位置(见代码)将不同于用户输入正确密码但输入错误电子邮件的位置?这是查询,if 语句设置的是 GET 错误变量:

$mysql = mysql_query("SELECT * FROM employees WHERE email = '{$email}' AND hashed_password = '{$hashed_password} '");

if ( mysql_num_rows($mysql) < 1 )
{
    header ("Location: index.php?error=1");
    die();    
} 

最佳答案

SELECT hashed_password = '{$hashed_password}' AS is_password_correct 
FROM employees WHERE email = '{$email}'

如果没有与 $email 匹配的条目,此查询将返回零行。

如果有匹配 $email 的行,查询将根据选择列表中的 bool 相等比较是真还是假返回 1 或 0。

然后,您可以根据三种可能的状态在您的应用中执行不同的操作。

您应该停止在 PHP 中使用已弃用的“mysql”函数,它们将在下一版本的 PHP 中消失。使用 mysqli 或 PDO。

您还应该学习使用准备好的查询并将您的 $hashed_pa​​ssword 和 $email 作为查询参数传递。这样您就可以避免 SQL 注入(inject)漏洞,而不必担心转义字符串。

这是一个完整的 PDO 示例(未经测试):

$stmt = $pdo->prepare("SELECT hashed_password = :password AS is_password_correct 
    FROM employees WHERE email = :email");
if ($stmt === false) {
    // always check for errors
}
$result = $stmt->execute(array(":password"=>$hashed_password, ":email"=>$email));
if ($result === false) {
    // always check for errors
}
if ($stmt->rowCount() == 0) {
    // no such user
} else {
    while ($row = $stmt->fetch()) {
        if ($row["is_password_correct"] == 1) {
            // password is correct for the given user
        } else {
            // password is wrong
        }
    }
}

关于MySQL条件检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14490660/

相关文章:

mysql - Spark 无法解析 MySQL 文本列

mysql - 用 10 000 个值填充 MySQL 数据库

mysql - 更新重复的行,除了一个

php - MySQL、PHP : echo IDs from smalest to largest

mysql - 亚马逊 RDS : ER_RECORD_FILE_FULL: The table is full occured while creating temporary table in stored procedure

php - php查询未运行?

mysql - 无法使用 Load Data infile local into mysql 加载大文件

MySQL根据列值生成随机数

php - 创建登录历史记录

php - Wordpress 循环 - Meta_Key 的唯一值