2016-07-23 9 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句を記述する必要がありますどこその後、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}'"; 
} 

他のここでの問題は決してこのような性質の文字列連結を終了していないことは非常に難しいトレースするバグにつながることであるから助けを得ることができます。

関連する問題