0

私はこのPerlコードを持っています:

my $cmd = "
  SELECT COUNT(id)
  FROM tblUsers
  WHERE UPPER(username) = UPPER(?) AND password = ?
";

db_connect();
my $sql = $dbh->prepare($cmd);

my $count = 2;

$sql->execute(
  $args{login_username},
  crypt($args{login_password}, $args{login_username})
) or die "SQL Error: ".$sql->errstr;

$sql->bind_columns(\$count);
$sql->fetch;

これは 0 を返していますが、1 を返す必要があります

次を出力した場合:

$msg = "wrong username/password: $count;$args{login_username};$args{login_password};" . crypt($args{login_password}, $args{login_username});

私は得る:

wrong username/password: 0;skeniver;password;skh9dtk2bCasY

そのcrypt部分はまさに私がデータベースに持っているものです。MySQL で同じ値を実行すると、カウント 1 が返されます。

ここで何が問題なのか本当にわかりません。

他の誰かが私が見逃しているものを見ていますか?

4

1 に答える 1

0

あなたのselect戻り値が非0値であると仮定し、列がfor =passwordであると仮定して、試してくださいtblUsersskh9dtk2bCasYusernameskeniver

 $sql->execute($args{login_username}, crypt($args{login_password},$args{login_username}))
        or die "SQL Error: ".$sql->errstr;
 $count = $sql->fetchrow_array();

または、クエリが複数の行を返す可能性がある場合は、

$sql->execute($args{login_username}, crypt($args{login_password},$args{login_username}))
        or die "SQL Error: ".$sql->errstr;
while (($count) = $sql->fetchrow_array()){                          
    print "Count is: $count\n"; 
}
于 2012-08-14T21:33:01.840 に答える