Php $result每次都显示为true
我刚开始学习PDOPhp $result每次都显示为true,php,pdo,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)
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(),但它也返回空值
你能告诉我我做错了什么吗
if($result->rowCount()>0){
echo "hey going great";
}else{
echo "Hey are you gone mad?";
}
这将始终检查变量是否有任何信息。在这个变量中运行查询和存储时,它将存储返回的行数。即使它是错误的,它也会返回一个设置变量的负值
基本上,如果您的只是检查变量是否存在,那么它在这两种情况下都存在 假设
$this->con
是PDO
的一个实例:
仅返回PDO->query()
onfalse
将是的实例,其计算结果始终为$result
true
- 返回受相应PDOStatement对象执行的最后一条DELETE、INSERT或UPDATE语句影响的行数 如果关联PDO语句执行的最后一条SQL语句是SELECT语句,则某些数据库可能会返回该语句返回的行数。但是,并非所有数据库都能保证此行为,便携式应用程序不应依赖此行为
PDO->query()
,您的应用程序会更安全,您可以尝试如下操作:
$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?";
你几乎每件事都做错了 首先,使用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?";
它将返回行数而不是字符串!=''还有=空值是相同的。不是吗?在select语句中,不影响行是吗??那么?你没有做错什么。查询执行正常(因此,
$result
变量为true)。我强烈建议您阅读可以检查的内容,即是否有1行(或更多?)行,然后运行Hey going great
@BeatAlex我尝试通过$result->rowCount()进行检查,但在这两种情况下(真数据和假数据)。。如何检查?SQL注入是一种需要避免的事情
if($userdata = $user->authenticate($username,$password))
echo "hey going great";
else
echo "Hey are you gone mad?";