如果我知道我只会从数据库接收一个密码,我是否必须将查询结果放入数组中?我在用着:
$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){}
由于 $result->fetch_array(MYSQLI_NUM) 返回一个数组类型,你可以直接引用它:
if($result->fetch_array(MYSQLI_NUM)[0] == $hash) ...
如果您已将哈希存储在数据库中(您应该这样做),那么您不必再次对其进行哈希处理。还对用户输入使用准备好的语句。
$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){}
}