Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Zend framework 如何使用Zend_Db_Select创建WHERE-IN子句_Zend Framework_Zend Db - Fatal编程技术网

Zend framework 如何使用Zend_Db_Select创建WHERE-IN子句

Zend framework 如何使用Zend_Db_Select创建WHERE-IN子句,zend-framework,zend-db,Zend Framework,Zend Db,因此,我正在努力实现以下目标: SELECT * FROM table WHERE status_id IN (1,3,4); $data = array(1,3,4); $select->where('status_id IN(?)', $data); 使用Zend_Db_选择。。。找不到该怎么做:(有可能吗?显然这非常简单……愚蠢的我: $select->where('status_id IN(1,3,4)'); :(您也可以这样使用它: SELECT * FROM tab

因此,我正在努力实现以下目标:

SELECT * FROM table WHERE status_id IN (1,3,4);
$data = array(1,3,4);
$select->where('status_id IN(?)', $data);

使用Zend_Db_选择。。。找不到该怎么做:(有可能吗?

显然这非常简单……愚蠢的我:

$select->where('status_id IN(1,3,4)');

:(

您也可以这样使用它:

SELECT * FROM table WHERE status_id IN (1,3,4);
$data = array(1,3,4);
$select->where('status_id IN(?)', $data);

您不需要内爆阵列,而且它更安全

第一个答案可能在ZF1中有效,但在Zend Framework 2中不起作用:

$completionNo = implode(",",$data);

$db = Zend_Db_Table_Abstract::getDefaultAdapter();
$select = $db->select()->from(array("p"=>PREFIX . "property_master"),array('id','completion_no','total_carpet_area'))->where("p.completion_no IN (?)", $completionNo);
$data = array(1,3,4);
$select->where('status_id IN(?)', $data);
在Zend Framework2中,我发现您必须使用:

$data = array(1,3,4);
$select->where(array('status_id' => $data));
结果:

WHERE `status_id` IN ('1', '3', '4')

我在任何地方都找不到这种文档!ZF文档通常是次优的。

我们可以使用
Zend\Db\Sql\Predicate\In
Zend\Db\Sql\Where
在模型内进行Where In查询

$this->status_ids = array(1,3,4);

// select attributes from db by where in 
$result = $this->select(function (Select $select) {
   $predicate = new In();
   $select->where(
      $predicate->setValueSet($this->status_ids)
                ->setIdentifier('status_id')
      );
})->toArray();

$ids=array('1','2','3','4','5','6','7','8');
$sql=newsql($this->adapter);
$select=$sql->select();
$select->from('app_post_comments');
$select->where(数组(“app_post_id”=>$id));
//echo$select->getSqlString($this->adapter->getPlatform());
//退出;
$statement=$sql->prepareStatementForSqlObject($select);
$result=$statement->execute();
$resultSet=新结果集();
$resultSet->initialize($result);
$resultSet->buffer()->toArray();
回声';
打印(结果集);
出口
返回$resultSet;

google搜索了这个问题,找到了你的解决方案,然后意识到我已经对它进行了一次升级。因此,既然我不能再次升级你,就把这条评论作为我的感谢!参数化INs的变化太多了,谢谢你帮我省下一个晚上使用google gloping的时间!Martin,我试过使用内爆,但看到整个字符串都是引号ed.感谢您提供了一个简单的解决方案。效果非常好!此解决方案适用于ZF1,但不适用于ZF2,请参阅我的其他答案。在阵列内爆后,我不适用于我。使用zf2Yes,我可以确认第一个答案:$select->where('status_id IN(?)$data);在ZF1中确实有效