Php Mysqli查询结果出现问题

Php Mysqli查询结果出现问题,php,mysql,mysqli,Php,Mysql,Mysqli,我正在尝试使用mysqli方法创建登录表单。我没有收到任何错误,但在这两种情况下(正确或不正确的身份验证),我都会收到IF条件结果的第二部分“您不被允许!” 我有一个名为users的表和两列(email,pass),其中包含用户的电子邮件和密码。现在你能告诉我我做错了什么吗?感谢您忘记运行查询。请参阅。首先连接到数据库,然后使用mysql\u query($query)执行查询 出于某种原因,您正在使用mysql和mysqli函数。这应该得到更新。这也是假设变量$mysqli包含有效的mysql

我正在尝试使用mysqli方法创建登录表单。我没有收到任何错误,但在这两种情况下(正确或不正确的身份验证),我都会收到IF条件结果的第二部分“您不被允许!”


我有一个名为users的表和两列(email,pass),其中包含用户的电子邮件和密码。现在你能告诉我我做错了什么吗?感谢您忘记运行查询。请参阅。

首先连接到数据库,然后使用
mysql\u query($query)执行查询


出于某种原因,您正在使用mysql和mysqli函数。这应该得到更新。这也是假设变量
$mysqli
包含有效的mysqli数据库连接:

<?php
include_once('db.php');
$eMail = mysqli_real_escape_string($mysqli,$_POST["eMail"]);
$passWord = mysqli_real_escape_string($mysqli,$_POST["psword"]);
$query  = $mysqli->query("SELECT count(*) FROM users WHERE (email='$eMail' AND pass='$passWord') LIMIT 1");
if( $mysqli->num_rows($query) > 0 ) {
    echo "You are allowed.";
}else{
    echo "You are not allowed!.";
}
mysqli_free_result($query);
$mysqli->close();?>

为了支持
mysqli
和/或
pdo
函数,不鼓励使用mysql扩展

您的代码失败,因为没有调用
mysql\u query
函数,因此在这一行代码中:

$query > 0 
您所做的只是验证字符串是否大于0,这就是为什么总是得到错误结果的原因

我已经将我的面向对象登录方法修改为(大部分)过程登录方法

下面是通过将参数绑定到准备好的语句来处理用户输入的不同方法:

function login($email, $password, $mysqli){
    if($login_stmt = $mysqli->prepare("SELECT Pass,Salt from Users WHERE Email = ? LIMIT 1")){
        $login_stmt->bind_param('s',$email);
        //The line above prevents SQL Injection
        $login_stmt->execute();
        $login_stmt->store_result();

        $rows = $login_stmt->num_rows;

        $login_stmt->bind_result($db_pass,$salt); //Stores the result in the $db_pass and $salt variables
        $login_stmt->fetch();
        $password = hash('sha512',$password.$salt); //This is a method I'm using to encrypt using sha512 encription
        if($rows==1){//The user exists
            if($db_pass==$password){
            //User logged in, do your stuff here
                return true;
            } else { 
                //password not correct
                return false;
            }
        } else{
            return false; //no user
        }
     } else {
         //Prepared statement failed
         return false;
    }
}
这里的主要区别在于,prepared语句和
bind_param
将如何防止代码上的SQL注入


我希望这有帮助。干杯

请不要在新代码中使用mysql_*函数。它们不再得到维护,社区已开始恢复。看到了吗?相反,你应该学习并使用或。如果你不能决定,将帮助你做出选择。如果你想学习,这里是。这是你的完整代码吗?如果是这样,你就错过了很多步骤。更不用说,混合和匹配MySQL库。嗨,Jason,完整的代码是什么意思?如果您指的是HTML和连接到数据库部分,我已经将它们放在了单独的文件中,如include_once('db.php')和login.index,您能告诉我您的确切意思吗?代码中的
$query
是一个字符串,而不是查询或结果。您必须使用mysqli对象进行查询,例如:
$db->query($query)
。如果下面的一个答案是正确的,请检查示例,请将其标记为正确,否则堆栈溢出将永远不会知道您的问题已经解决。考虑一些有问题的投票问题,其他类似问题的用户可以更容易地找到答案。HI VLCEKMI3,我正在使用MyQuLi库。我仍然需要运行MySqLQuyIE()方法约翰吗?我正在使用MyQuLi库。我仍然需要运行MySqLQueIE()方法吗?您的代码显示您正在使用旧的MySqL**函数。mysqli函数都以mysqli开始(以过程格式使用时)。而且,是的,您仍然需要调用mysql\u query()或mysqli\u query()来实际执行您的sql。嗨,Samuel,我用了您的代码,现在什么都没有得到。这只是一个空白页
<?php
include_once('db.php');
$eMail = mysqli_real_escape_string($mysqli,$_POST["eMail"]);
$passWord = mysqli_real_escape_string($mysqli,$_POST["psword"]);
$query  = $mysqli->query("SELECT count(*) FROM users WHERE (email='$eMail' AND pass='$passWord') LIMIT 1");
if( $mysqli->num_rows($query) > 0 ) {
    echo "You are allowed.";
}else{
    echo "You are not allowed!.";
}
mysqli_free_result($query);
$mysqli->close();?>
$query > 0 
function login($email, $password, $mysqli){
    if($login_stmt = $mysqli->prepare("SELECT Pass,Salt from Users WHERE Email = ? LIMIT 1")){
        $login_stmt->bind_param('s',$email);
        //The line above prevents SQL Injection
        $login_stmt->execute();
        $login_stmt->store_result();

        $rows = $login_stmt->num_rows;

        $login_stmt->bind_result($db_pass,$salt); //Stores the result in the $db_pass and $salt variables
        $login_stmt->fetch();
        $password = hash('sha512',$password.$salt); //This is a method I'm using to encrypt using sha512 encription
        if($rows==1){//The user exists
            if($db_pass==$password){
            //User logged in, do your stuff here
                return true;
            } else { 
                //password not correct
                return false;
            }
        } else{
            return false; //no user
        }
     } else {
         //Prepared statement failed
         return false;
    }
}