Php 非对象上的fetch()
我一直收到相同的错误消息…Php 非对象上的fetch(),php,pdo,mysqli,Php,Pdo,Mysqli,我一直收到相同的错误消息… 致命错误:对非对象调用成员函数fetch() 我试过: -正在从“:user”和“:pass”中删除引号 -将fetch()更改为fetchAll() -使用PDO::FETCH_ASSOC 我似乎找不到一个问题来解决这个问题,它们都是可靠的SQL语句,里面没有变量 $q = $dbh->prepare("SELECT * FROM users WHERE username= ':user' AND password= ':pass' "); $q -&
致命错误:对非对象调用成员函数fetch()
我试过:
-正在从“:user”和“:pass”中删除引号
-将
fetch()
更改为fetchAll()
-使用PDO::FETCH_ASSOC
我似乎找不到一个问题来解决这个问题,它们都是可靠的SQL语句,里面没有变量
$q = $dbh->prepare("SELECT * FROM users WHERE username= ':user' AND password= ':pass' ");
$q -> bindParam(':user', $username);
$q -> bindParam(':pass', $password);
$result = $q -> execute();
$numrows = count($result);
echo $numrows;
if($numrows == 1){
while($row = $result->fetch(PDO::FETCH_OBJ)){
$row["id"] = $_SESSION["id"];
$row["username"] = $_SESSION["username"];
$row["password"] = $_SESSION["password"];
$row["email"] = $_SESSION["email"];
}
} else {
header("location: index.php?p=5");
}
应在PDOstatement对象上使用Fetch 根据报告: PDOStatement::fetch-从结果集中获取下一行
fetch
函数是PDOStatement对象的成员函数。
手册中的示例:
$sth = $dbh->prepare("SELECT name, colour FROM fruit");
$sth->execute(); //no need in another variable, like: $r = $sth->
/* Exercise PDOStatement::fetch styles */
$result = $sth->fetch(PDO::FETCH_ASSOC); //$sth, not "$r"
另一个注意事项:
关于execute
的用法,根据,它返回一个布尔值(真/假),而不是一个值数组
我相信您已经使用了mySQL,所以对您来说,到PDO的“迁移”有点奇怪,请参阅手册并遵循一些教程。删除
用户的引用
和传递
$q = $dbh->prepare(" SELECT * FROM users WHERE username= :user AND password= :pass");
问题是,如果失败,它将返回
false
,count(false)
实际上是1
,如果成功,它将返回true
,count(true)
也是1
,您需要更好的错误检查。@adeneo我确信他们从mysql\u*
api切换过来,错误地认为pdo语句execute
也会返回一个结果集,就像mysql\u query
does一样,当他们说$result=$q->execute()时
然后,$result
不是他们认为的那样,它只能是真/假
execute()
返回一个bool
而不是结果集。