2011-12-30 24 views
8

Tôi đang cố gắng tìm nạp các hàng nằm trong một mảng các số nguyên mà tôi đã sử dụng Zend Framework 1.11.Làm thế nào để thực hiện MySQL IN mệnh đề sử dụng Zend DB?

$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)); 

Khi tôi sử dụng phương pháp __toString() của $this->dbSelect, tôi nhận được

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')) 

này chỉ trả lại hàng đáp ứng các điều kiện nơi product_ref_id = 10 Làm thế nào tôi có thể nhận được khoản TRÊN là

product_ref_id IN ('10', '12') 

hoặc

product_ref_id IN (10, 12) 

sử dụng câu lệnh chuẩn bị Zend DB để tôi có thể tìm nạp tất cả các hàng chứa bên trong mảng id sản phẩm?

Trả lời

15

Đừng nổ tung mảng, chỉ cần vượt qua nó:

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

Vì vậy, ngay, cảm ơn bạn! Bạn đã trả lời quá nhanh Tôi chưa thể chấp nhận câu trả lời, nhưng tôi sẽ khi tôi được phép! – danronmoon

1

Đó là giá trị đề cập rằng có 2 cách để sử dụng WHERE TRÊN clausule trong Zend_Db_Select:

  1. Chúng tôi có thể vượt qua mảng như tham số thứ hai:

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

  2. Hoặc chúng ta có thể sim ply nổ tung mảng để có được giá trị như chuỗi:

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

+0

Phương pháp thứ hai không an toàn nếu '$ array_of_values' không phải là một mảng các số nguyên! Chỉ cần tưởng tượng sử dụng điều này trong một xóa() trong khi '$ array_of_values' chứa: mảng (" column_value "). Điều này sẽ dẫn đến: 'DELETE FROM table_name WHERE column_value IN (column_value)' sẽ xóa mọi thứ! –

-1
->where('country_id IN (?)', $country_ids); 
Các vấn đề liên quan