2012-08-14 113 views
0

我有此Perl代码错误值:的Perl DBI选择提供使用bind_columns

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的计数。

我真的不知道这里出了什么问题。

其他人看到我失踪的东西吗?

+0

你使用的是'DBD :: mysql'吗? – Annjawn 2012-08-14 21:26:51

+0

我正在使用使用DBI; – skeniver 2012-08-14 21:27:13

+0

尝试'$ count = $ sql-> fetchrow_array();'而不是'$ sql-> bind_columns(\ $ count); $ sql-> fetch;'看看'$ count'的结果是什么。 – Annjawn 2012-08-14 21:32:08

回答

0

假设你select返回非0值,并假设在tblUserspasswordskh9dtk2bCasYusername = skeniver,尝试

$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"; 
} 
+0

SQL是'SELECT count(id)...'。这是一个多行查询? – Borodin 2012-08-14 21:39:26

+0

我不知道这是多行查询。我的假设是没有它没有。但是,我对整个查询本身(即'WHERE ... AND'子句)持怀疑态度。没有“GROUP BY”的 – Annjawn 2012-08-14 21:40:42

+0

它只是计算WHERE条款的匹配数量。一行一列 – Borodin 2012-08-14 21:44:30