我正在爲一個站點建立一個簡單的登錄功能,並且遇到了一些麻煩。當我嘗試登錄該網站時,我不斷收到用戶名和密碼不匹配的錯誤。這當然是我自己定義的錯誤,但問題是我不應該在這種情況下得到它。MySQL查詢雖然PHP不返回值
我打印計算出來的密碼散列,並確保這一步正確執行,它是。在此之後,我跑
SELECT * FROM members WHERE user='username' AND pass='hashed_password';
直接朝我的MySQL數據庫,直接提供用戶名和哈希值。這返回了所需的值。我的PHP代碼如下所示:
$dsn = "mysql:host=localhost;dbname=my_db";
$u = "localhost";
$pdo = new PDO($dsn,$u);
$query = $pdo->prepare("SELECT * FROM members WHERE user=':username' AND pass=':hashed_pass'");
$query->execute(array(':username'=>$username,':hashed_pass'=>$hashed_pass));
$result = $query->fetch();
if($result){
//Log in user
}else{
//Print error
}
這不返回任何東西,即使我提供正確的價值觀,它不斷給我的錯誤。我不確定什麼可能會導致這個問題,但是如果我猜測,我會說它與這些字符集有關。我的數據庫使用UTF-8。儘管如此,當通過編碼直接查詢數據庫時,我仍然從MySQL獲得期望的結果。編碼爲ISO-8859。所以我真的不確定。任何幫助將非常感激!
$ username和$ hashed_pass從哪裏來,你確定它們包含正確的值嗎?使用回聲來確認這一點。 –
這是完全不相關的,但你最好用用戶名選擇用戶,然後將結果用戶表的密碼與使用PHP的散列密碼相匹配。 – CreativityKills
@CreativityKills不確定我同意這一點。 –