2

我正在尝试使用 crypt 函数来验证数据库中用户的详细信息:

    my $sql = $dbh->prepare("SELECT COUNT(id) FROM tblUsers WHERE UPPER(Username)=UPPER(?) AND Password=?");
    my $count;
    $sql->execute(
        $args{login_username},
        crypt($args{login_password},$args{login_username})
        );

但它返回 0 行(密码绝对正确)

该行:

    $sql->execute($args{login_username},$args{login_password});

完美运行。

关于可能出现什么问题的任何想法?

4

1 回答 1

2

看起来存储在数据库中的密码未加密。要比较加密形式的值,您还需要在数据库端对它们进行加密。

MySQL有一个ENCRYPT函数,所以你可以写

my $sql= $dbh->prepare(<<SQL);
SELECT COUNT(id)
FROM tblUsers
WHERE UPPER(Username) = UPPER(?)
AND ENCRYPT(Password, Username) = ?
SQL

$sql->execute($args{login_username}, crypt($args{login_password},$args{login_username}));

但确切的语法取决于您使用的平台。

于 2012-04-13T07:07:54.443 回答