0

こんにちは、Zend_Db_Select に問題があります。私は2つの変数を持っています:カテゴリと都市。これら 2 つの変数には、値がある場合と設定されていない場合があります。だから私は確認します:

$status = '`p`.status = 1';
    if($catID){
        $catSQL =  "`p`.parent = {$catID}";
    }else{
        $catSQL = '1=1';
    }

    if($city){
        $citySQL =  "`pm`.`meta_key` = 'oras' and `pm`.`meta_value` = {$city}";
        $citySelect = array('pm' => 'postsmeta');
        $condCity = "`p`.`ID` = `pm`.`parent_id`";
    }else{
        $citySQL = '1=1';
        $citySelect = NULL;
        $condCity = '1=1';
    }

ここに私のクエリがあります:

 $select = $db->select()
         ->from( array('p' => 'posts'))
         ->from($citySelect)
         ->where($status)
         ->where($catSQL)
         ->where($condCity)
         ->where($citySQL)
         ;

問題は、都市が空の場合、次のようなものがあることです

 $select = $db->select()
         ->from( array('p' => 'posts'))
         ->from('')
         ->where(1=1)
         ->where(1=1)
         ->where(1=1)
         ->where(1=1)
         ;

質問は、都市が空の場合、クエリから from('') を削除する方法です。ありがとうございました!

4

1 に答える 1

2

単に、

$select = $db->select()
->from( array('p' => 'posts'));
if($someConditionIsTrue) {
    $select->join($table, $condition);
}
$select->where('field_value = ?', 'value1');
if($someConditionIsTrue) {
    $select->where('another_field = ?', 'value 2');
}

それが役に立てば幸い。

SQL インジェクションを防ぐために、この構文を使用して$select->where('another_field = ?', 'value 2');値を適切にエスケープしてください。

于 2014-01-21T14:49:09.033 に答える