2016-11-12 42 views
0

我正在制作一份php文档,如果用户在数据库中并且输入了正确的用户名和密码,则用户所在的日志。为了安全起见,我使用了准备好的语句,但是我无法从SELECT查询中获得结果来设置我的网站所需的会话变量。这里是我的代码...从准备好的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

也做一些调试'var_dump'或'print_r'来测试你的查询。 –

+0

它应该是'$ query - >> bind_result($ id,$ username,$ favs);'而不是'$ sql - > ...' – Mihai

+0

@Mihai你错了 –

回答

1

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

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

+1

请downvoters请解释他们的理由,以帮助我理解为什么我的答案不好或甚至不正确? – Quagaar