非对象上的fetch()

时间:2015-05-28 06:06:32

标签: 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 -> 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");
    }

2 个答案:

答案 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)

userpass

中删除引用
$q = $dbh->prepare(" SELECT * FROM users WHERE username= :user AND password= :pass");