2011-07-01 218 views
0

我有一個函數象下面這樣:在MYSQL選擇 - 選擇所有記錄

public function select($id=null) { 
    $query = "select * from press_releases where id = {$id}"; 

    $results = $this->db->query($query); 

    return $results; 
} 

如果函數調用過程中未指定$id,我想回到所有的記錄,但我認爲NULL默認值不這是一個很好的選擇。我應該做什麼而不是NULL來檢索除使用未指定where部分中的id字段的另一個查詢之外的所有記錄。

謝謝...

+0

總有一些誰認爲他們是聰明和downvote他人的問題的人...... – Tarik

+1

我沒有downvote你,但你要明白不是soemone不downvote,因爲他認爲自己是聰明。我想每個來到這個網站的人,無論是問還是回答,都認爲他很聰明。 Downvote意味着他認爲問題不明確,或者它不可用,或者OP在發佈之前搜索了一下或嘗試了一些東西並不明顯。 –

回答

8
$query = "select * from press_releases"; 
if (!empty($id)) 
{ 
    $query .= "where id = {$id}"; 
} 

如果$id是一個整數,我會用:

$id = (int) $id; 
if ($id > 0) 
... 

無論哪種方式,我會確保$id可以放心使用。

+0

我喜歡這個答案,雖然與我實現的類似。 – Tarik

2

這可能工作:

$query = "select * from press_releases where id = {$id} OR {$id} IS NULL"; 
-1

你可以更換其中運營商等,如在

$query = "select * from press_releases where id LIKE '{$id}'"; 

和默認值更改爲「%」,但我不喜歡這個解決方案出於效率原因

只有在絕對需要保留查詢時,您才應該這樣做。否則,只有在給出$id參數的情況下,才能更改查詢以追加where條件。那將是正確的解決方案。

+0

這會產生意外的額外記錄。 – Randy

+0

你是對的,我從頭開始編寫它,因爲它要求不改變查詢。我要用正確的答案更新我的答案。 – Fabio

-1

SELECT DISTINCT ID從press_releases