PHP Prepared Statements登录表单

时间:2013-01-11 00:49:16

标签: php mysql

我一直在用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);

1 个答案:

答案 0 :(得分:2)

来自bind_result上的手册:

  

请注意,必须在mysqli_stmt_execute()和之后绑定所有列   在调用mysqli_stmt_fetch()之前。

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

您还应检查fetch的返回值,而不是$result或任何其他变量。

相关问题