2016-07-23 88 views
-1

我有以下查詢,它工作正常。 但如果$where是陣列它將會失敗,有什麼解決方案?建立動態mysql查詢與多個條件

public function update($tbl_name, $data = NULL, $where = NULL) 
{ 

    if ($data) { 

     $data_key = array_keys($data); 
     $where_key = array_keys($where); 

     $query = "UPDATE " . $data['db_table'] . " SET "; 
     foreach ($data_key as $key) { 
      $query .= "`" . $key . "` = '" . $data[$key] . "' "; 
     } 
     //todo fix that for multi where 
     $query.=" WHERE `".$where."`=".$where['']; 
     return $this->query($query); 
    } 
    return false; 
} 
+0

您必須確定where變量是否爲數組,如果是必須遍歷它並將where子句作爲字符串寫入新變量,然後在SQL查詢語句中輸出。 – Jeff

+0

您需要一個'WHERE IN(數組元素)'來過濾多個值。如果數組元素是文本,則需要用引號括住它們。無論元素類型如何,您都需要在值之間使用逗號分隔符。 –

+0

謝謝,我更新code.can任何人都給我正確的代碼。 –

回答

2

你知道這是一件相當危險的事嗎?你的數據庫被進入某種意想不到的事情所困擾的機會太高了。而對於where子句,你可以從is_array

if(is_array($criteria)) { 
    $query.=" WHERE `".$where." IN (" . join(",", $criteria) . ")"; 
} 
else { 
    $query.=" WHERE `".$where." = '{$criteria}'"; 
} 

這裏的另一個問題是,永遠不會結束這種性質的字符串連接會導致非常難以跟蹤的錯誤得到幫助。