参数化MySQL查询IN子句

时间:2013-05-01 22:07:14

标签: zend-framework prepared-statement zend-db parameterized

我正在使用Zend的方便方法来调用数据库fetchAll。知识渊博者应该知道这是一个允许查询参数化的函数。例如,查询可以是:

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

这就是如何实现参数化。

我的查询是:

 $query = "select * from user where email in ("noLuck@hotmail.com", "hotmailsucks@gmail.com","gmailrocks@hotmail.com");

如何参数化上述查询,因为这些电子邮件是用户输入,所以我不会简单地将它们放在原始查询中并尝试以下失败:

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

其中$commaSeparatedEmailList = "(".implode("," , $emails).")";

有什么想法吗?

1 个答案:

答案 0 :(得分: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));