2013-06-23 96 views
1

如果我知道我只接收來自數據庫的一個密碼,是否必須將查詢結果放入數組中?我使用的是:從mysqli獲取一個值

$sql = 'SELECT password FROM users WHERE userName="'.$username.'" LIMIT 1'; 
$result = $con->query($sql); 
$row = $result->fetch_array(MYSQLI_NUM); 
$hash = crypt($password,$row[0]); 
if($row[0] == $hash){} 

回答

0

如果您已將散列存儲在數據庫中(您應該這樣做),那麼您不必再次散列它。也使用用戶輸入的準備好的語句。

$sql = $con->prepare("SELECT password FROM users WHERE userName=? LIMIT 1 "); 
$sql->bind_param("s", $username); 
$sql->execute(); 
$sql->bind_result($password_db); 
while ($sql->fetch()) { 

$hash = crypt($password,$password_db); 
if($password_db == $hash){} 

    } 

http://www.php.net/manual/en/mysqli-stmt.prepare.php

0

你可以使用list代替:

list($passwd) = $result->fetch_array(MYSQLI_NUM); 

if($passwd == $hash) { 

}; 

這裏的PHP reference

+0

+1這是因爲簡潔,你可以得到用於檢索單個值沒有數據庫抽象庫。 –

+0

downvoter會照顧評論嗎? – 2013-06-23 04:13:03

0

因爲$ result-> fetch_array(MYSQLI_NUM)將返回數組類型,你可以參考它直接:

if($ result-> fetch_array(MYSQLI_NUM)[0] == $ hash) ...

+0

請注意,該語法僅適用於PHP 5.4及更高版本 –