2012-08-14 79 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