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 に答える