[英]PDO ->query returns null
$dbh->query
适用于$queryUser = $dbh->query
,但不适用于$querySessions = $dbh->query
, $querySessions
为null,
echo $querySessions == null;
回声1
接着
致命错误:调用/path/to/file.php中非对象上的成员函数fetchAll()在行上(while(count($ querySessions-> fetchAll())!= 0))
if($_POST['loginbtn'])
{
$User = $_POST['user'];
$Pass = md5(md5("salt" . $_POST['pass'] . "salt2"));
if($User)
{
if($_POST['pass'])//not $Pass because thats hashed
{
$queryUser = $dbh->query("SELECT * FROM `Users` WHERE `UserName` = '" . base64_encode($User) . "' LIMIT 1");
$Record = $queryUser->fetch();
if($Pass != $Record["Password"])
{
echo "Incorect password.";
}
else
{
if($Record["Banned"] == 1)
{
echo "Sorry, your banned.";
}
else
{
if($Record["NeedsActivation"] == 1)
{
echo "You must activate your account before you can login.";
}
else
{
$SID = md5(rand(0,0x7fffffff) . "salt3");
$querySessions = $dbh->query("SELECT * FROM `Sessions` WHERE `ID` = " . $SID . " LIMIT 1");
echo $querySessions == null;
while(count($querySessions->fetchAll()) != 0)
{
$SID = md5(rand(0,0x7fffffff) . "salt2");
$querySessions = $dbh->query("SELECT * FROM `Sessions` WHERE `ID` = " . $SID . " LIMIT 1");
}
$_SESSION['id'] = $SID;
$dbh->query("INSERT INTO `godzchea_Site`.`Sessions` (`ID` ,`UserID`)VALUES ('" . $SID . "', '" . $Record["ID"] . "');");
echo base64_decode($Record["UserName"]) . " Logged in.";
}
}
}
}
else
{
echo "You must enter your password.";
}
}
else
{
echo "You must enter your username.";
}
}
谁能看到为什么将其设置为null,以及是否有更好的循环方法,直到获得空id。
问题在于这样一个事实,即与$querySession
关联的查询失败。 您的查询中可能存在错误,因为《手册》说的是:
PDO::query() returns a PDOStatement object, or FALSE on failure.
我不确定,但是也可能是找不到行。 我可以给您的建议是,找出真正的错误是:
try{/*code in here*/}catch(PDOException $e){ exit($e->getMessage()); }
try{/*code in here*/}catch(PDOException $e){ exit($e->getMessage()); }
,看看它的输出。 $SID
的值,然后尝试将其运行到phpmyadmin中,直接运行到数据库中。 请注意,致命错误还与查询返回false而不是对象的事实有关。 该错误仅表示您将$querySession
视为对象,但事实并非如此。
有关更多信息,请发表评论,我会回答。
祝好运。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.