在非对象上调用成员函数fetch()

时间:2017-02-17 12:49:39

标签: php mysql pdo

我收到错误:

Call to a member function fetch() on a non-object

这指的是:

$getProjectIdResult = $stmt->fetch();

现在,我认为从这个错误中我的数据库查询肯定有问题,因为文档说PDO查询在失败时返回false。我无法确定导致问题的原因。

我尝试用try / catch包装抓取,

$this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

然而,捕获并未触发,我只是得到了原始的致命错误,因此我无法获得更具体的错误。

classes.php

class Query extends Connection {

    public function getProjectID($surveyID) {

        $query_getProjectID = "SELECT projectID FROM test WHERE surveyID = :surveyID";

        $query_getProjectID_params = array(

            ':surveyID' => $surveyID
        );

        try {

            $stmt = $this->db->prepare($query_getProjectID);
            $stmt = $stmt->execute($query_getProjectID_params);
        }

        catch (PDOException $ex) {

            die("Failed to get project ID: " . $ex->getMessage());
        }

        $getProjectIdResult = $stmt->fetch();

        $getProjectID = $getProjectIdResult['projectID'];       

        return $getProjectID;
    }
}

test.php的

include_once("includes/classes.php");
include_once("includes/functions.php");

// Bind $_GET data
// localhost/panel/test.php?surveyID=3&status=1&respondentID=666
// Expected result: 111

$surveyID = sanitise($_GET['surveyID']);
$status = sanitise($_GET['status']);
$respondentID = sanitise($_GET['respondentID']);


$con = new Connection();
$query = new Query();

$query->getProjectID($surveyID);

$con->closeConnection();

我已经排除了使用和不使用它进行测试导致问题的消毒功能。

我很抱歉,因为我知道这可能只是另一个业余爱好者在判断同一个标题的帖子数量时判断出另一个业余错误。

1 个答案:

答案 0 :(得分:1)

致电时

execute()

$stmt的返回值赋给$stmt,覆盖变量,使其成为布尔值而不是对象。继续时,PDOStatement不再保留$stmt =对象,但现在是布尔值。

解决方案就是删除对象的覆盖,就像这样(删除前面的$stmt->execute($query_getProjectID_params); )。

{{1}}