-1

mysqli に変換しようとしていますが、予想どおり、問題が発生しています。

次のようにログインスクリプトを作成しました。これは機能し、正しいと思います。(パスワードをハッシュする必要があることはわかっています。最初にそれを起動して実行したいだけです)

//  POST variables
$username = ($_POST['username']);
$password = ($_POST['password']);

//Input Validations
if($username == '') {
    $errmsg_arr[] = 'Username required';
    $errflag = true;
}
if($password == '') {
    $errmsg_arr[] = 'Password required';
    $errflag = true;
}

//If there are input validations, redirect back to the login form
if($errflag) {
    $_SESSION['ERRMSG_ARR'] = $errmsg_arr;
    session_write_close();
    header("location: logon.php");
    exit();
}

//prepared statements

if ($stmt = $mysqli->prepare("SELECT username, password FROM auth WHERE username='$username' AND password='$password'")) {
$stmt->execute();

/* bind variables to prepared statement */
$stmt->bind_result($user, $pass);

/* fetch values */
$stmt->fetch();
if ($user == $username && $pass == $password)
{
    printf("Welcome %s", $user);
}
else
{
    printf("Login failed");
}


/* close statement */
$stmt->close();
}
/* close connection */
$mysqli->close();

?>

ログインが成功した場合にセッション変数を設定したいのですが、以前はmysqllで次のことを行っていました

$qry="SELECT * FROM auth WHERE username='$username' AND password='$password'";
$result=mysql_query($qry);

//Check whether the query was successful or not
if($result) {
    if(mysql_num_rows($result) > 0) {
        //Login Successful
        session_regenerate_id();
        //Set session variables
        $member = mysql_fetch_assoc($result);
        $_SESSION['SESS_MEMBER_ID'] = $member['ID'];
        $_SESSION['SESS_USERNAME'] = $member['username'];
        $_SESSION['SESS_FIRST_NAME'] = $member['fname'];
        $_SESSION['SESS_PASSWORD'] = $member['password'];
        $_SESSION['SESS_AUTH_LEVEL'] = $member['auth_level'];
        session_write_close();
        header("location: index");
        exit();
    }else {
        //Login failed
        $errmsg_arr[] = 'user name or password not found';
        $errflag = true;
        if($errflag) {
            $_SESSION['ERRMSG_ARR'] = $errmsg_arr;
            session_write_close();
            header("location: logon.php");
            exit();

私の問題は「$member = mysql_fetch_assoc($result);」だと思います。mysqli でこれを行うにはどうすればよいですか? 準備されたステートメントはユーザー名とパスワードのみをバインドしているため、以前は SELECT * FROM を使用していました

ありがとう

4

1 に答える 1

1

基本的に関数を使用する必要があります: $mysqli->query(string)$mysqli_result->num_rows()および$mysqli_result->fetch_assoc()

コードは次のようになります。

$mysqli = new mysqli(...);

$qry = "SELECT * FROM auth WHERE username=? AND password=?";
$stmt = $mysqli->prepare($qry);
$stmt->bind_param('ss', $username, $password);

//Check whether the query was successful or not
if($stmt->execute()) {
    $result = $stmt->get_result();
    if($result->num_rows() > 0) {
        session_regenerate_id();
        $member = $result->fetch_assoc();
        $_SESSION['SESS_MEMBER_ID'] = $member['ID'];
        ...
    } else {
        ...
    }
}
...

ここでの質問とは直接関係ありませんが、次の 2 行を置き換えて、準備済みステートメントを正しく使用することをお勧めします。

if ($stmt = $mysqli->prepare("SELECT username, password FROM auth WHERE username='$username' AND password='$password'")) {
    $stmt->execute();
    ...

これ等と一緒に:

if ($stmt = $mysqli->prepare("SELECT username, password FROM auth WHERE username=? AND password=?")) {
    $stmt->bind_param('ss', $username, $password);
    $stmt->execute();
    ...
于 2013-06-05T09:05:56.377 に答える