ユーザーを認証する関数を書いています。データベースとの接続を作成し、クエリを準備し、パラメーターをバインドし、クエリを実行し、結果を変数にバインドし、クエリが結果を返したかどうかを確認します。
一致した場合は、(変数にバインドされた) 結果を比較し、ステートメントを閉じ、接続を閉じてから、適切な値を返します。まあ、それは私がやっていることだと思いますが、構文エラーが発生し続け、何が間違っているのかわかりません:
構文エラー: 予想: exit、if、識別子、変数、echo、do、while、for、foreach、declare、switch、break、continue、function、return、try、throw、use、global、unset、isset、empty、class 、インターフェイス、配列、{、}、include、include_once、eval、require、require_once、print、';'、+、-、!、~、++、-、@、[、new、static、abstract、final , (, $
私のコード:
/**
* Authenticates a user.
* @param type $email - String value
* @param type $hashedPassword - String value
* @return true if user is authenticated or false otherwise - Boolean value
*/
function isValidUser($email, $hashedPassword)
{
//This variable will hold the value returned from the query to the database.
var $rPassword = NULL;
//Establish a connection
$mysqli = new mysqli($GLOBALS['dbServer'], $GLOBALS['dbUserName'], $GLOBALS['dbPassword'], $GLOBALS['dbName']);
//Check if connection failed
if($mysqli->connect_error)
{
die('Connect Error (' . $mysqli->connect_errno . ') '
. $mysqli->connect_error);
}
$stmt = $mysqli->prepare("SELECT password FROM user_info WHERE email=?");
$stmt->bind_param('s', $email);
$stmt->execute();
$stmt->bind_result($rPassword);
if($stmt->fetch())
{
if(($rPassword != null) && ($rPassword == $hashedPassword))
{
$stmt->close();
$mysqli->close();
return true;
}
}
$stmt->close();
$mysqli->close();
return false;
}
私は準備済みステートメントを使用せずにこれを行っていましたが、コードは正常に機能しましたが、いくつかの調査を行ったところ、準備済みステートメントは SQL インジェクションを防ぐのに役立つため、進むべき道であることがわかりました。