PHP准备好的声明问题

时间:2014-05-12 19:19:03

标签: php sql prepared-statement

我无法实施以下准备好的声明。 我已经使用了相同的预处理语句代码,并使其在其他地方工作,所以不知道我哪里出错了。我已经启动并运行了以下脚本,没有使用连接的预准备语句,因此我知道我的SQL或初始电子邮件/密码验证没有问题。

数据库查询只返回一行,我不认为这会影响我的while数组提取? 电子邮件地址和密码设置为prepared statement ('ss')中的字符串,假设没有问题。

我在初始查询连接中使用get_password_hash($p)并且它有效。也许我应该把它包含在这样的绑定参数中:

  

$ loginQuery-> bind_param( 'SS',$ E,get_password_hash($ P));

而不是......

非常感谢任何建议。

// Array for recording errors:
$login_errors = array();


// Validate the email address:
if (filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
$e = $_POST['email'];
} else {
$login_errors['login'] = 'Please enter a valid email address!';
}

// Validate the password:
if (!empty($_POST['pass'])) {
$p = $_POST['pass'];
} else {
$login_errors['pass'] = 'Please enter your password!';
}


if (empty($login_errors)) { // OK to proceed!
// Query the database:

/************NO ISSUES WITH ABOVE; THIS WORKED FINE BEFORE I TRIED CONVERTING TO PREPARED STATEMENTS************/

    $pas = get_password_hash($p);
    $loginQuery = $dbc->prepare("SELECT id, username, type, IF(date_expires >= NOW(), true, false) FROM user WHERE (email= ? AND pass= ?)");
    $loginQuery->bind_param('ss',$e,$pas);
    $loginQuery->execute();
    $loginQuery->bind_result($l);

        while(loginQuery->fetch()){
        $login = $l;
        $_SESSION['user_id'] = $login[0];
        $_SESSION['username'] = $login[1];
        } 

}  

1 个答案:

答案 0 :(得分:1)

您在顶部使用变量$p,但您在下方使用$pas

无论如何,你不应该用准备好的陈述做任何mysql_escape_blahblahblah的事情。直接这样做:

$loginQuery->bind_param('ss',$_POST['email'],$_POST['pass']);