2012-09-21 81 views
0

我正在寫一個客戶數據庫。我有一個功能來顯示所有看起來像這樣的客戶。函數變量無法訪問

<?php 
class customer{ 

public function getAllCustomers(){ 
    global $database; 
    $query = $database->query('SELECT * FROM hs_customers'); 
    $result = $database->statement->fetchAll(); 
    return $result; 
} 
} 
?> 

直到這裏一切正常。它的連接,即時獲取數據等。唯一不滿意的是我不希望數據庫名稱在函數內硬編碼,此外我希望它被變量替換。所以ID做了以下(正如我之前做的,它的工作好),但突然它不會替代變量了嗎?......

<?php 
class customer{ 

private $customerDB = 'hs_customers'; 

public function getAllCustomers(){ 
    global $database; 
    $query = $database->query('SELECT * FROM :db', array(':db' => $customerDB)); 
    $result = $database->statement->fetchAll(); 
    return $result; 
} 
} 
?> 

我想我已經得到了一些錯誤。有什麼建議?先謝謝你。

回答

1

您不能在SQL使用的語法上使用變量容器,例如,一個table name或其他任何涉及到像ordergroup等語法所以爲了動態地做到這一點,你必須逃離SQL字符串,並使用它像

$query = $database->query('SELECT * FROM '.($this->customerDB)); 

- 爲@TimG

更新而且因爲您處於班級環境中,變量$customerDB應被視爲類屬性。您必須使用$this->賦值才能使用某個類的任何屬性,除非在該情況下爲靜態,請使用self::

+0

作品:)。謝謝!還有其他人! – Dreshar

+0

這個答案是正確的,但未能解決OP所具有的兩個問題。您應該更新您的答案,並提供有關缺少「$ this」的信息,但仍然需要+1才能看到第一眼不明顯的問題。 :) –

4

PHP需要您從方法中訪問類成員時使用$this

array(':db' => $this->customerDB) 
0

如果你希望能夠更換的變量,你需要使用的語句prepare這樣的:

$Var1 = 'Allo'; 
$Var2 = 30; 

$Query = $DB->prepare('SELECT * FROM Table WHERE Field1 = :Data1 AND Field2 = :Data2'); 
$Query->bindValue(':Data1', $Var1, PDO::PARAM_STR); 
$Query->bindParam(':Data2', $Var2, PDO::PARAM_INT); 
$Query->execute(); 

bindValue將直接將該值綁定到查詢。

bindParam會將變量名稱綁定爲「static」。如果在運行execute之前編輯該變量,則會顯示變量的內容。

另外,你的情況,你需要使用$this->customerDB,而不是$customerDB。您所指的變量在一個班級中,請使用$this訪問班級內容。