繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM