0

我刚开始学习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()但它也返回空值...

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

4

5 回答 5

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?";
于 2013-11-15T09:47:05.787 回答
1

假设$this->con是 的一个实例PDO

  • PDO->query()只返回失败false
  • $result将是 的一个实例PDOStatement,它总是计算为true
  • PDOStatement->rowCount()返回受相应 PDOStatement 对象执行的最后一个 DELETE、INSERT 或 UPDATE 语句影响的行数。

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

编辑:顺便说一句,如果您使用PDO->prepare()(& 绑定参数) 而不是PDO->query().

于 2013-11-15T09:40:50.007 回答
0
if($result->rowCount()>0){
        echo "hey going great";
    }else{
        echo "Hey are you gone mad?";
}
于 2013-11-15T09:33:59.860 回答
0
if($result)

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

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

于 2013-11-15T09:37:30.843 回答
-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?";
于 2013-11-15T09:42:14.090 回答