2013-06-23 60 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及更高版本 –