0

Я использую методы удобства Zend для вызовов DB fetchAll. Это, как известно знающим, является функцией, которая позволяет параметризовать запросы. Например, запрос может быть:Параметрирование запросов MySQL В разделе

И так можно достичь параметризации.

Мой запрос, однако, заключается в следующем:

$query = "select * from user where email in ("[email protected]", "[email protected]","[email protected]"); 

Как параметризировать выше запрос, потому что эти электронные письма, вводимых пользователем, поэтому я не буду просто иметь их в сыром запросе и пытается следующее несостоявшимся :

$query = "select * from user where email in ? "; 
$this->_db->fetchAll($query, $commaSeparatedEmailList); 

где $commaSeparatedEmailList = "(".implode("," , $emails).")";

Любые идеи?

ответ

2

К сожалению, ZF немного не согласен с тем, как он справляется с этим. Некоторые из классов работают с параметрами массива, но, к сожалению, fetchAll() на классе адаптера не является одним из них. Есть два (немного грязные) вариант я в курсе:

коммутатора к построению запроса с Zend_Db_Select вместо (который не обрабатывать его правильно):

$select = $db->select(); 
$select->from('user') 
     ->where('email IN (?)', $email); 

$db->fetchAll($select); 

или придерживаться fetchAll и использовать quoteInto:

$db->fetchAll("SELECT * FROM user WHERE ".$db->quoteInto('email IN (?)', $email));