我刚开始学习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(),但它也返回空值...
你能告诉我我在这里做错了吗?
答案 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->con
是PDO
的实例:
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?";