2013-07-30 157 views
0

我說建立我的數據庫類。將SQL語句分配給類變量

這是我的數據庫類的一部分。

public function query($sql) 
{ 
    return $this->getPdo()->query($sql); 
} 

我班正在工作,但我想改善它。

這是類的外部:

$db = new Database(); 
$q = $db->query('SELECT * FROM table'); 

while($r = $q->fetch(PDO::FETCH_ASSOC)){ 
    $results[] = $r; 
} 

echo "<pre>"; 
print_r($results); 
echo "</pre>"; 

我想,而數據庫類中的部分像

public function query($sql) 
{ 
    return $this->getPdo()->query($sql); 
} 

public function getAll() { 
    while($r = $this->query($sql)->fetch(PDO::FETCH_ASSOC)){ 
     $results[] = $r; 
    } 
    return $results; 
} 

但我知道這部分是錯誤的函數:$ this->查詢($ SQL) - >取(PDO :: FETCH_ASSOC);我該如何解決它?我必須聲明一個像$ sql這樣的類變量,並且我必須將sql語句分配給$ sql變量。

但我不能。我怎樣才能做到這一點 ?

+0

您是否在班上有**準備語句**支持? –

+0

現在沒有。但我會添加它。現在綁定值和準備對我來說更加複雜。我解決了這個問題後。我會去做。但一步一步來。 – cihanblog

回答

1
$q = $db->query('SELECT * FROM table'); 
$results = $q->fetchAll(); 

echo "<pre>"; 
print_r($results); 
echo "</pre>"; 
-2

您需要的$sql參數傳遞到您的getAll()方法,然後用return得到結果退了出來。因此,這種方法就變成了:

public function getAll($sql) { 
    while($r = $this->query($sql)->fetch(PDO::FETCH_ASSOC)){ 
     $results[] = $r; 
    } 
    return $results; 
} 

然後你使用它的外部,如:

$db = new Database(); 
$results = $db->getAll('SELECT * FROM table'); 
echo "<pre>"; 
print_r($results); 
echo "</pre>"; 
0

你的一個最大的問題是,當你寫

public function getAll() { 
    while($r = $this->query($sql)->fetch(PDO::FETCH_ASSOC)){ 
     $results[] = $r; 
    } 
    return $results; 
} 

你是導致數據庫運行循環的每個迭代的查詢。

要糾正代碼,因爲它是簡單地定義運行查詢的循環之外再使用提取的循環條件:

public function getAll() { 
    $stmt = $this->query($sql); 
    while($r = $stmt->fetch(PDO::FETCH_ASSOC)){ 
     $results[] = $r; 
    } 
    return $results; 
} 

這可能是可能導致你悲傷的另一個問題是,$ SQL值似乎來自空氣稀薄。你應該將它傳遞給你的getAll函數來訪問它。

要避免所有這些噪音,您可能只需按照@ YourCommonSense的建議並使用可用的PDO getAll方法。

public function getAll($sql){ 
     return $this->query($sql)->fetchAll(PDO::FETCH_ASSOC); 
} 
相關問題