我一直收到同样的错误信息......
致命错误:在非对象上调用成员函数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");
}
答案 0 :(得分:3)
应该在PDOstatement对象上使用Fetch。
根据PDO manual:
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
的使用情况,根据manual,它返回一个布尔值(true / false)而不是一个值数组。
我相信你已经使用了mySQL,因此对PDO的“迁移”对你来说有点奇怪,请查看手册并按照一些教程进行操作。
答案 1 :(得分:1)
从user
和pass
$q = $dbh->prepare(" SELECT * FROM users WHERE username= :user AND password= :pass");