0

我正在使用 Zend 的便捷方法进行 DB 调用 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).")";

有任何想法吗 ?

4

1 回答 1

2

不幸的是,采埃孚在处理这个问题上有点不一致。一些类确实使用数组参数,但不幸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));
于 2013-05-02T00:09:17.603 回答