2011-12-30 14 views
8

Zend Framework 1.11を使用している整数の配列にある行を取得しようとしています。Zend DBを使用してMySQL IN節を実行する方法は?

$this->dbSelect 
     ->from($table_prefix . 'product_link') 
     ->joinLeft($table_prefix . 'product_link_name', $table_prefix . 'product_link.product_link_name_ref_id = ' . $table_prefix . 'product_link_name.product_link_name_id') 
     ->where('product_ref_id IN (?)', implode(', ', $product_ids)); 

私は$this->dbSelect__toString()メソッドを使用すると、私は

SELECT `phc_distrib_product_link`.*, 
    `phc_distrib_product_link_name`.* 
FROM `phc_distrib_product_link` 
LEFT JOIN `phc_distrib_product_link_name` 
ON phc_distrib_product_link.product_link_name_ref_id = phc_distrib_product_link_name.product_link_name_id 
WHERE (product_ref_id IN ('10, 12')) 

を得る。これはのみproduct_ref_id = 10 がどのようにIN句が

であることを得ることができる条件を満たした行を返します。
product_ref_id IN ('10', '12') 

または

product_ref_id IN (10, 12) 

Zend DBプリペアドステートメントを使用すると、製品ID配列内に含まれるすべての行をフェッチできますか?

答えて

15

はちょうどそれを渡し、配列内破しないでください:

->where('product_ref_id IN (?)', $product_ids); 
+0

だから右、ありがとうございました!あなたはとても速く答えました。私は答えをまだ受け入れることができませんが、私が許可されたら私はします! – danronmoon

1

それは価値がZend_Db_SelectではWHERE clausuleで使用する2つの方法があることを述べている:我々は、配列を渡すことができ

  1. 2番目のパラメータとして:

    $select->where("column_value IN (?)", $array_of_values)

  2. それともは、SIMできますプライ文字列として値を取得するために、配列を内破:

    $select->where("column_value IN (" . implode(',', $array_of_values) . ")")

+0

'$ array_of_values'が整数の配列でない場合、2番目のメソッドは全く安全ではありません! '$ array_of_values'には以下のものが含まれています:delete()でこれを使用すると想像してください。 配列(" column_value ")。結果は次のようになります。 'DELETE FROM table_name WHERE column_value IN(column_value)' これはすべてを削除します! –

-1
->where('country_id IN (?)', $country_ids); 
関連する問題