2012-11-17 2 views
-1

PHP에서 PDO를 사용하고 있습니다. 다음과 같은 문제가 있습니다.PHP (PDO)에서 개인 변수에 액세스

다음 코드는 작동하지 않습니다.

class A { 
private $getUsersQuery = "SELECT * FROM users";  
... 
public function getUsers() {  
    $DBH = A::getDatabaseConnection();   
    try { 
     $query = $DBH->prepare($this->getUsersQuery); 
     ... 
    } catch(PDOException $e) {} 
} 
} 

그러나 문자열을 사용하면 작동합니다.

$DBH->prepare("SELECT * FROM users"); 

내가 밖에서 에코를 사용하는 경우에도 준비() 작동 ...

echo $this->getUsersQuery; // Outputs the sql string. 

사람이 문제가 될 일을 지적 할 수 있습니다.

업데이트 :

오류 :

SQLSTATE [42000] : 구문 오류 또는 액세스 위반 : 1065 쿼리가 비어

감사

+0

정상적으로 작동합니다. 코드 오타를주의 깊게 확인하십시오. –

+3

동의해야합니다. '작동하지 않는다'는 것이 정확히 무엇을 의미합니까? 오류 메시지가 있습니까? – Tchoupi

+1

가장 중요한 질문은 다음과 같습니다. 어떻게 작동하지 않습니까? 어떤 오류 메시지가 표시됩니까? – markus

답변

4

귀하의 의견에 언급했듯이 정적이 아닌 메서드에 대한 정적 호출을 만듭니다. 이런 식으로 호출되는 방법에 $this를 사용

는 아무 의미하지 않습니다 :

$results = A::getUsers(); 

실체화 클래스를 다음의 클래스 객체에 메서드를 호출합니다.

$a = new A(); 
$a->getUsers(); 

또는 메소드와 SQL 쿼리를 정적으로 설정하십시오.

+0

도움을 주셔서 감사합니다 ... 문제가 해결되었습니다. – Fox

+0

원본 코드가 어떻게 해석 되었습니까? –

+0

@LightnessRacesinOrbit 달리 OP는 달리 명시된 것 같습니다 : P하지만 당신의 요점을 이해합니다. 어떻게 든 PHP는 정적이 아닌 메서드를 정적으로 호출 할 때주의를 기울이지 않는 것으로 알고 있습니다. 대부분의 경우 경고를 throw하지만 어쨌든 코드를 실행합니다. 그래서 그것은 왜 'echo'로 작동하고 method 매개 변수가 아닌지는 나에게 미스테리입니다. – Tchoupi

0

$a = new A(); 
$result = $a->getUsers(); 

에게 값을보십시오 $ getUsersQuery가 A :: getUsers를 호출했을 때 초기화되지 않은 것 같습니다.(). 정적 메서드는 좋아하는 호출됩니다.

관련 문제