2016-09-29 45 views
-1

我試圖用php建立一個sql查詢,其中每個GET變量(如果設置)都被追加到查詢中。因此,例如:用PHP參數構建mySQL查詢 - 「第一個AND」

$dbQuery = "SELECT * FROM orders WHERE deleted = 0 AND ({$dueQ} {$paidQ} {$completedQ} {etc. etc. etc.}) "; 

,每個參數都創建像這樣:

$due = $_GET['due']; 
if (isset($due)) { 
    $dueQ = " AND due = '0'"; 
} 

所以我檢查,看看每個獲得的參數設置,那麼如果是這樣,並稱字符串到查詢。

我的問題是這樣的...... 如何創建查詢,使第一個參數不以「AND」開頭?由於我不知道哪個將作爲追加到查詢中的第一個參數,因此我無法找到解決此問題的方法,而不是以「AND」開頭。現在查詢顯示「AND due ='0'AND ...」。合理?

+0

如果這一切都'和'的條件下,沒有必要對括號,你可以將其添加後直接刪除'= 0'。如果您打算使用發送的值,則應該使用準備好的語句。 – jeroen

+0

不想讓事情與我的問題複雜化,但也有和和/或參數,所以他們可以是和或或在括號內。 – user2755541

回答

3

你可以爲膠與AND添加參數到一個數組,然後implode()他們:

$params = array(); 
if (isset($_GET['due'])) 
    $params[] = "due = '0'"; 

if (isset($_GET['paid'])) 
    $params[] = "paid = '0'"; 

...etc... 

$dbQuery = "SELECT ... WHERE deleted = 0 AND ".implode(' AND ', $params); 
//SELECT ... WHERE deleted = 0 AND due = '0' AND paid = '0' 
1

使用一個布爾變量來檢查是否狀態已經在狀態滿足與否,以及基於布爾變量,逐步構造查詢,像這樣:

$dbQuery = "SELECT * FROM orders WHERE deleted = 0"; 

$flag = false; 

$due = $_GET['due']; 
if(isset($dueQ)){ 
    $dbQuery .= " AND due = '0'"; 
    $flag = true; 
} 

if(isset($paidQ)){ 
    if($flag){ 
     $dbQuery .= " something = 'something'"; 
    }else{ 
     $dbQuery .= " AND somethingElse = 'somethingElse'"; 
     $flag = true; 
    } 
} 

if(isset($completedQ)){ 
    if($flag){ 
     $dbQuery .= " something = 'something'"; 
    }else{ 
     $dbQuery .= " AND somethingElse = 'somethingElse'"; 
     $flag = true; 
    } 
} 

// etc.