2012-11-24 31 views
1
$mysqli = mysqli_connect("localhost", "root", "pass", "test"); 

function check_login($mail,$pwd){ 
    global $mysqli;  
    if($stmt= $mysqli->prepare('SELECT COUNT(*) FROM `users` WHERE mail = ? AND pwd = MD5(?)')){ 
     $stmt->bind_param("ss", $mail, $pwd);  
     $stmt->execute(); 
     $stmt->bind_result($count); 
     $stmt->close(); 
     var_dump($count); 
    } 
    return ($count > 0 ? true : false); 
} 

check_login('[email protected]','pass'); 

我已經通過在stackoverflow上看到一些腳本來編寫此腳本。我試圖運行它,發現腳本執行後$ count爲NULL。有人能告訴我爲什麼這個腳本返回NULL而不是給我結果?

我想知道爲什麼這不適合我。我試圖在Mysql上運行相同的命令,它顯示了我的結果。

有人幫我吧..

+0

我可以看到類似「命令不同步;現在不能運行此命令」 – user1814971

+1

請參閱http://php.net/manual/en/mysqli-stmt.bind-result.php - 您還需要在變量被填充之前發出fetch()調用。 – mario

+0

@mario謝謝親愛的,這現在正在爲我工​​作。 – user1814971

回答

1

mysqli::bind_result需求->execute後和->fetch調用之前被調用。 fetch()不是可選的,因爲(綁定結果)變量引用僅僅是手動提取結果行的替代方法。

因此,在你的代碼:

$stmt->execute(); 
    $stmt->bind_result($count); 
    $stmt->fetch(); // result array thrown away 
1

首先,你不應該只是複製和粘貼代碼,尤其是那些需要與數據庫搞亂的人;瞭解代碼試圖實現什麼,然後寫下你的代碼。
其次,

 

'SELECT COUNT(*) FROM `users` WHERE mail =? AND pwd =?' 
 

有一個機會的代碼並沒有運行,因爲你的密碼被存儲在數據庫中的明文替換

 

    'SELECT COUNT(*) FROM `users` WHERE mail = ? AND pwd = MD5(?)' 
 


讓我們知道這是否有效。

+0

感謝您的幫助,不,我已經運行測試腳本進行學習,並使用MD5對哈希密碼進行哈希處理。它已經在工作了。 – user1814971

相關問題