2017-02-17 107 views
-2

,我发现了错误:调用一个成员函数取()一个非对象

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(); 

我已经排除了的sanitize函数与没有它的测试引起的问题。

我很抱歉,因为我知道这可能只是另一个业余人士做出另一个业余的错误判断有多少职位有相同的标题。

+1

的可能的复制[我的PDO声明不起作用(http://stackoverflow.com/questions/32648371/my-pdo-statement-doesnt-work) –

+0

@MasivuyeCokile我会不同意,我已经意识到这个错误通常意味着什么 - 我只是在某个地方搞砸了,无法用我有限的知识来发现它 –

回答

1

当你调用

$stmt = $stmt->execute($query_getProjectID_params); 

您的​​的返回值分配给$stmt,覆盖变量,使其成为一个布尔值,而不是一个对象。当你继续,$stmt不再持有PDOStatement对象,但现在是一个布尔值。

解决方法是简单地删除对象的覆盖,就像这样(删除前面的$stmt =)。

$stmt->execute($query_getProjectID_params); 
+0

感谢兄弟,这正是问题:)我知道它会小东西 –

+0

很高兴这帮助你解决了你的问题!请接受和upvote,如果这是解决方案:-) *干杯!* – Qirel

+0

是的,我会检查出重复的问题,并想知道为什么我会得到downvotes。我没有看到它是如何以任何方式重复的。他所做的只是解释如何显示错误,我在我的帖子中提到我已经有:( –

相关问题