$ result每次都显示为true

时间:2013-11-15 09:32:20

标签: php pdo

我刚开始学习PDO ......

 function authenticate($username,$password)
 {
    $result=$this->con->query("select * from user where UserName='".$username."' AND Password='".$password."'");
    var_dump($result->rowCount()); //return null
    if($result)
        echo "hey going great";
    else
        echo "Hey are you gone mad?";
}

我使用用户名密码调用上述功能...但是如果我输错了,它每次都会返回嘿嘿很棒部分用户名和密码也......

我尝试使用 $ result-> rowCount(),但它也返回空值...

你能告诉我我在这里做错了吗?

5 个答案:

答案 0 :(得分:2)

你几乎都做错了。

首先,使用PDO的唯一原因是在查询中使用占位符 您也不应该在函数中检查查询结果。所以,做吧

function authenticate($username,$password)
{
    $sql = "SELECT * FROM user WHERE UserName=? AND Password=?";
    $stm = $this->con->prepare($sql);
    $stm->execute([$username,$password]);
    return $stm->fetch();
}

然后致电

if($userdata = $user->authenticate($username,$password))
    echo "hey going great";
else
    echo "Hey are you gone mad?";

答案 1 :(得分:1)

假设$this->conPDO的实例:

  • PDO->query()仅返回failure上的false
  • $result将是PDOStatement的一个实例,其总是评估为true
  • PDOStatement->rowCount()返回受相应PDOStatement对象执行的最后一个DELETE,INSERT或UPDATE语句影响的行数。

      

    如果关联的PDOStatement执行的最后一条SQL语句是 SELECT 语句,则某些数据库可能会返回该语句返回的行数。但是,对于所有数据库,此行为无法保证,并且不应依赖于便携式应用程序。

修改:顺便说一句,如果您使用PDO->prepare()(&绑定参数)而不是PDO->query(),您的应用会更安全。

答案 2 :(得分:0)

if($result->rowCount()>0){
        echo "hey going great";
    }else{
        echo "Hey are you gone mad?";
}

答案 3 :(得分:0)

if($result)

这将始终检查变量是否包含任何信息。当您在此var中运行查询和存储时,它将存储返回的行数。即使它是错误的,它也会返回一个设置变量的neg值。

基本上你的 if 只是检查变量是否存在,它在两种情况下都存在。

答案 4 :(得分:-1)

你可以尝试:

$result=$this->con->query("select * from user where UserName='".$username."' AND Password='".$password."'");
    var_dump($result->rowCount()); //return null
    $num_row=$result->rowCount();
    if($num_row > 0)
        echo "hey going great";
    else
        echo "Hey are you gone mad?";