如果用户在数据库中并输入了正确的用户名和密码,我正在制作一个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,我确保所有输入的信息都是正确的。
答案 0 :(得分:1)
将变量赋值移到调用bind_params之上的$ e和$ p,或者至少在调用之上声明它们。
bind_params的参数通过引用传递,因此在绑定之后但在执行生效之前对变量进行更改,但AFAIK变量必须在绑定调用之前存在。