首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >参数化MySQL查询IN子句

问参数化MySQL查询IN子句
EN

Stack Overflow用户
提问于 2013-05-02 06:07:14
回答 1查看 138关注 0票数 0

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

代码语言:javascript
复制
$query = "select * from user where email = ?"
$results = $this->_db->fetchAll($query, $email);

这就是参数化的实现方式。

然而,我的疑问是:

代码语言:javascript
复制
 $query = "select * from user where email in ("noLuck@hotmail.com", "hotmailsucks@gmail.com","gmailrocks@hotmail.com");

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

代码语言:javascript
复制
$query = "select * from user where email in ? ";
$this->_db->fetchAll($query, $commaSeparatedEmailList);

where $commaSeparatedEmailList = "(".implode("," , $emails).")";

有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-02 08:09:18

不幸的是,ZF在如何处理这个问题上有点不一致。其中一些类确实可以处理数组参数,但不幸的是,适配器类上的fetchAll()不在其中。我知道有两个(有点混乱)的选择:

切换到使用Zend_Db_Select构建查询(它可以正确处理查询):

代码语言:javascript
复制
$select = $db->select();
$select->from('user')
       ->where('email IN (?)', $email);

$db->fetchAll($select);

或者坚持使用fetchAll并使用quoteInto:

代码语言:javascript
复制
$db->fetchAll("SELECT * FROM user WHERE ".$db->quoteInto('email IN (?)', $email));
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16327288

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档