我正在使用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);where $commaSeparatedEmailList = "(".implode("," , $emails).")";
有什么想法吗?
发布于 2013-05-02 08:09:18
不幸的是,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));https://stackoverflow.com/questions/16327288
复制相似问题