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() 之前绑定所有列。

您正在绑定一个变量,但您正在选择 6 列。您需要将所有 6 列绑定到一个变量,然后在条件内,您不必获取另一行,因为您已经这样做了,并且您的获取结果将在您的变量中可用。

您还应该检查fetch、 not$result或任何其他变量的返回值。

于 2013-01-11T00:59:57.800 回答