2012-11-17 92 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外的準備()它的工作原理...

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似乎並不關心,而且大部分時間都會拋出警告,但無論如何執行代碼。那麼爲什麼它使用'echo'而不是方法參數對我來說是個謎。 – Tchoupi

0

嘗試

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

值$ getUsersQuery可能在您調用A :: getUsers時未初始化()。靜態方法被稱爲喜歡那個。