2014-04-21 2 views
0

왜 _sth 객체에서 fetchAll 메소드를 사용하기 때문에 Call to a member function fetchAll() on a non-object 오류를 반환하는지 알지 못합니다.비 객체의 fetchAll() 멤버 함수 호출

아무도 왜 이것을하는지 알 수 있습니까?

FormValidator PHP

$users = $this->_db->query("SELECT * FROM $ruleValue WHERE $input = ?", array($inputValue)); 
if($users->count()) { 
    $this->addError($input, $rule); 
} 

방법

public function query($sql, $params = array()) { 
    $this->_sth = $this->_dbh->prepare($sql); 

    if($this->_sth = $this->_sth->execute($params)) { 
     return $this->_sth->fetchAll(PDO::FETCH_OBJ); 
    } 

    return false; 
} 
+2

(http://stackoverflow.com/questions/23200937/pdo-query-method-with-bindvalue-seems-not- to-be-working), 같은 결과와 함께. –

+0

함수에서 왜이 코드를 사용하고있는 것입니까? 그렇기 때문에 동일한 코드를 반복해서 반복 할 필요가 없습니다. –

+1

'execute()'는 부울을 반환합니다. 그것은'fetchAll()'함수를 가지고 있지 않습니다. 그냥'if ($ this -> _ sth -> execute ($ params)) {'. –

답변

3
if($this->_sth = $this->_sth->execute($params)) { 

단일 = 할당 연산자이다. execute()은 부울 TRUE 또는 FALSE를 반환하고이를 $this->_sth에 할당합니다. 도 TRUE FALSE 어느

return $this->_sth->fetchAll(PDO::FETCH_OBJ); 

개체이며, 더 fetchAll() 방법이 없다.

@RocketHazmat의 주석이 정확하므로 execute()의 반환 값을없이 _sth에 할당하여 테스트 할 수 있습니다. 예 :

if($this->_sth->execute($params)) { 
    return $this->_sth->fetchAll(PDO::FETCH_OBJ); 
} 
1

이미 말했듯이 두 가지 큰 결함이 있습니다.

  1. 수업 중에 상태를 소개하지 마십시오. 지역 변수를 사용하고 결과를 리턴하십시오.
  2. Ther은 쿼리에서 단일 변수가 아닌 이어야합니다.

public function query($sql, $params = array()) { 
    $sth = $this->_dbh->prepare($sql); 
    $sth->execute($params); 
    return $sth->fetchAll(PDO::FETCH_OBJ); 
} 

의 상태를 소개하지 마십시오 당신이 필요로하는 모두이다.

게으르지 말고 전체 쿼리를 작성하십시오. [다시 ** 그리고 당신이 당신의 잘못된 기능을 사용하려는 **]

$user = $this->_db->query("SELECT * FROM users WHERE param = ?", [$inputValue]); 
if($user) { 
    $this->addError($input, $rule); 
} 
관련 문제