0

このコードに問題があります:

$loginrequest = $mysqli->prepare(
    "SELECT name, password, salt FROM users WHERE name = ? OR email = ?");
$loginrequest->bind_param("ss", $login, $login);
$loginrequest->execute();
$loginrequest->bind_result($name, $encrypted_password, $salt);

while ($loginrequest->fetch()) {

  $hash = $this->checkhashSSHA($salt, $password);

  if ($encrypted_password == $hash) {
    return $name;
  }
  else {
    return false;
  }
}

ご覧のとおり、ユーザーのログインを確認したいのですが、パスワードが正しい場合はユーザー名を返し、そうでない場合は false を返します。

$mysqliしかし、これを行っているクエリを閉じる必要はありませんか?

$loginrequest->close();
$mysqli->close();

$nameは while ループでのみ使用できるため (これを正しく理解していれば)。前に文字列を宣言して$name値に変更できたということですが、それを閉じる必要はありますか?

ちなみにstore_resultPHPのバージョンが古すぎて使えません。

4

1 に答える 1

0
  • 終了ステートメントは、フェッチされた変数のバインドを解除しません。
  • 1 行をフェッチして返すので、whileを削除できます。

これにより、パスワードと終了ステートメントが比較されます。

    $loginrequest->fetch();
    $loginrequest->close();
    $hash = $this->checkhashSSHA($salt, $password);
    if ($encrypted_password == $hash)
      return $name;
    return false;
于 2012-12-09T01:33:16.047 に答える