[英]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.