1

プリペアドステートメントを使用してPHPでログインスクリプトをコーディングしていますが、それを機能させることができません。なぜこれが機能しないのかを誰かが指摘できますか?

ログインするたびに、「ステートメントが失敗しました!」というメッセージが表示されます。

//Start session
session_start();

//Include database connection details
require_once('config.php');

    //Sanitize the POST values
$login = clean($_POST['login']);
$password = clean($_POST['password']);

$query = $dbconn -> prepare("SELECT * FROM members WHERE login=? AND passwd=?");
$query -> bind_param("ss", $login, $password);

if($query->execute() == true) {
    $query -> bind_result($result);
    $query -> fetch();
    if($result){
            $member = mysqli_fetch_assoc($result);
            session_regenerate_id();
            $_SESSION['SESS_MEMBER_ID'] = $member['member_id'];
            $_SESSION['SESS_FIRST_NAME'] = $member['firstname'];
            $_SESSION['SESS_LAST_NAME'] = $member['lastname'];
            $_SESSION['SESS_IS_ADMIN'] = $member['admin'];
            session_write_close();
            echo $_SESSION['SESS_MEMBER_ID'];
            echo $_SESSION['SESS_FIRST_NAME'];
            echo "Test!";
            exit();
    }else{
            echo "Statement failed";
    }
}
/* Close statement */
$query -> close();

config.phpには、次のものがあります。

$dbconn = new mysqli('localhost', 'root', 'password', 'bookingsystem');

また、ユーザーのデータベース構造は次のようになります。

`members` (`member_id`, `firstname`, `lastname`, `login`, `passwd`, `admin`) VALUES
(1, 'Steve', 'Stone', 'Admin', '5f4dcc3b5aa765d61d8327deb882cf99', 1);
4

1 に答える 1

2

のマニュアルからbind_result

すべての列は、mysqli_stmt_execute()の後、mysqli_stmt_fetch()を呼び出す前にバインドする必要があることに注意してください。

1つの変数をバインドしていますが、6つの列を選択しています。6つの列すべてを変数にバインドする必要があります。その後、条件内で、すでに行っているように別の行をフェッチする必要はありません。フェッチの結果は変数で利用できます。

また、他の変数ではfetchなく、の戻り値を確認する必要があります。$result

于 2013-01-11T00:59:57.800 に答える