2012-06-17 35 views
1

我正在爲我的數據庫應用程序使用codeigniter。我不確定是否可以在codeigniter數據庫類中使用get_where進行自定義查詢。如何使用在Codeigniter中使用自定義查詢時的位置

這是我的查詢

$this->db->query("select model, varient, (select color from mtbl_colors where mtbl_colors.colorid=mtbl_vehicles.colorid) as color from mtbl_vehicles"); 

現在,如果我想爲

function getVehicles($model='',$varient='') 
{ 
     if($model!='') 
      { 
      $q=$this->db->query("select model,varient,(select color from mtbl_colors where 
      mtbl_colors.colorid=mtbl_vehicles.colorid) as color from mtbl_vehicles 
      where model='$model'")->result(); 
      return $q; 
      } 
     elseif($varient!='') 
      { 
     $q=$this->db->query("select model,varient,(select color from mtbl_colors where 
      mtbl_colors.colorid=mtbl_vehicles.colorid) as color from mtbl_vehicles 
      where varient='$varient'")->result(); 
      return $q; 
      } 
    } 

過濾上述使用where子句中,我使用的查詢這只是一個例子,在那裏我有寫出每個條件的所有條件。所以,我可能會錯過codeigniter中的某些東西,它可以完成這樣的倍數,其中的條件比我現在使用的更容易。

編輯::::

從@Yan我想作爲建議如下

function getVehicles($where_clause='',$where_value='') { 
    $sql = "select model,varient,(select color from mtbl_colors where 
    mtbl_colors.colorid=mtbl_vehicles.colorid) as color from mtbl_vehicles"; 
    $where_clause=array("varient", "model", "colorid"); 
    $where_value=array("MAGNA 1.4", "SANTRO", "3") 

    if (!empty($where_clause) && !empty($where_value)) { 
     $sql .= " where $where_clause = ?"; 
    return $this->db->query($sql, $where_value)->result(); 
    } 
    return false; 
    } 

我收到了數據庫錯誤說「無效的列值Aarray」

我的意圖是後根據我的過濾器選項實現多個條件以生成結果。

+0

您可以找到有關這個笨文檔中[HTTP: //ellislab.com/codeigniter/user-guide/database/queries.html](http://ellislab.com/codeigniter/user-guide/database/queries.html) – machineaddict

回答

2

試試這個:

$sql = "select model,varient,(select color from mtbl_colors where 
     mtbl_colors.colorid=mtbl_vehicles.colorid) as color from mtbl_vehicles"; 

$where_condition = ''; 
if (!empty($model)) { 
    $sql .= " where model = ?"; 
    $where_condition = $model; 
} 
elseif (!empty($varient)) { 
    $sql .= " where varient = ?"; 
    $where_condition = $varient; 
} 

if (!empty($where_condition)) { 
    return $this->db->query($sql, $where_condition)->result(); 
} 
return false; 

使用這種方式逃脫輸入。

編輯: 一個更好的解決辦法,但你需要消毒where_clause變量:

function getVehicles($where_clause='',$where_value='') { 
    $sql = "select model,varient,(select color from mtbl_colors where 
     mtbl_colors.colorid=mtbl_vehicles.colorid) as color from mtbl_vehicles"; 

    if (!empty($where_clause) && !empty($where_value)) { 
     $sql .= " where $where_clause = ?"; 
     return $this->db->query($sql, $where_value)->result(); 
    } 
    return false; 
} 

編輯2 - 使用數組:

function getVehicles($where_array) { 
    $sql = "select model,varient,(select color from mtbl_colors where 
     mtbl_colors.colorid=mtbl_vehicles.colorid) as color from mtbl_vehicles"; 

    $values = array(); 
    $counter = 0; 
    foreach ($where_array as $key => $value) { 
     if ($counter > 0) { 
      $sql .= " AND "; 
     } 

     $sql .= " where $key = ?"; 
     array_push($values, $value); 
     $counter ++; 
    } 
    return $this->db->query($sql, $values)->result(); 
} 
+0

謝謝@Yan你節省了我的時間。 – Prajwal

+0

很高興你發現它有幫助。 –

+0

嗨@Yan你可以請幫忙,如果我可以在where_value裏面where_value和多個條件中使用多個列嗎? 剛纔我嘗試使用數組,但它不起作用 – Prajwal

相關問題