[英]Fetch results from prepared SELECT 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,并且我确保所有输入的信息都是正确的。
将变量分配移至对bind_params的调用上方的$ e和$ p或至少在调用之上进行声明。
bind_params的参数是通过引用传递的,因此对绑定之后但在执行之前生效的变量所做的更改会生效,但是AFAIK变量必须在绑定调用之前存在。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.