从准备好的SELECT语句中获取结果

时间:2016-11-12 19:55:52

标签: php mysql database mysqli prepared-statement

如果用户在数据库中并输入了正确的用户名和密码,我正在制作一个php文档。为了安全起见,我使用的是预处理语句,但我无法从SELECT查询中获取结果来设置我的站点所需的会话变量。这是我的代码......

<?php
session_start();
require 'config.php'; #This file has all connection info 
#$C is the mysqli connection
#$USERS is the name of the table in my database
$sql = $C->prepare('SELECT ID,Username,Favorites FROM '.$USERS.' WHERE Email=? AND Password=PASSWORD(?)');
$sql->bind_param("ss", $e,$p);

$e = $_POST['e'];#email
$p = $_POST['p'];#password

$query = $sql->execute();
$sql->store_result();
$numrows = $sql->num_rows;
if($numrows == 1) {
    $sql->bind_result($id,$username,$favs);
    while($sql->fetch()) {
        $_SESSION['ID'] = $id;
        $_SESSION['Name'] = $username;
        $_SESSION['favs'] = $favs;
        $_SESSION['valid'] = true;
    }
    echo 'true';
}
else {
    echo 'User Not Found';
}

这只是回应'找不到用户',因为$ numrows总是= 0,我确保所有输入的信息都是正确的。

1 个答案:

答案 0 :(得分:1)

将变量赋值移到调用bind_params之上的$ e和$ p,或者至少在调用之上声明它们。

bind_params的参数通过引用传递,因此在绑定之后但在执行生效之前对变量进行更改,但AFAIK变量必须在绑定调用之前存在。