我正在尝试使用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});
完美无缺。
关于可能出错的任何想法?
答案 0 :(得分: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}));
但确切的语法取决于您使用的平台。