Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/277.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
Php Zend框架Mysql WHERE IN子句_Php_Mysql_Zend Framework_Where In - Fatal编程技术网

Php Zend框架Mysql WHERE IN子句

Php Zend框架Mysql WHERE IN子句,php,mysql,zend-framework,where-in,Php,Mysql,Zend Framework,Where In,使用zend框架,我使用了一个查询,有一个IN子句,这是我的查询 $select->where('p.brandid IN (?)',$details[brand]); 在上面的查询中,$details[brand]的值类似于这个数组(1,2,3) 实际上,查询必须返回所有与该数组(1,2,3)相关的值 但我的查询返回的是与上述数组(1,2,3)中的第一个值相关的结果。即不考虑仅1和其他2,3 当我打印这个查询时,它显示如下 [where] =&

使用zend框架,我使用了一个查询,有一个IN子句,这是我的查询

       $select->where('p.brandid  IN (?)',$details[brand]);
在上面的查询中,$details[brand]的值类似于这个数组(1,2,3)

实际上,查询必须返回所有与该数组(1,2,3)相关的值

但我的查询返回的是与上述数组(1,2,3)中的第一个值相关的结果。即不考虑仅1和其他2,3

当我打印这个查询时,它显示如下

             [where] => Array
               (
                [0] => (p.brandid  IN ('1,2,3'))
              )

有人能告诉我我犯了什么错误或解决方案吗?

这是因为您的查询在('1,2,3')中的
p.brandid格式错误。
而不是(1,2,3)中的
p.brandid
您可以尝试在php中使用内爆函数

$select->where('p.brandid  IN (?)',implode(",",$details[brand]));

您可以根据Zend framwork修改此项

locate(concat(',',$details[brand],','),concat(',',p.brandid,','))>0

只是小小的研究,因为我也有同样的问题

我不知道你用的是什么版本的Zend。但是@Omesh提供的解决方案不适用于我的1.12版

在我的情况下,这是完全相反的
爆炸
解决方案:

$select->where('p.brandid  IN (?)', explode(',',$details[brand]));
这可能取决于
$details['brand']
的类型。在我的例子中,我有类似
555666777877
的字符串。但即使你有数组。如果Zend在您的案例中接受
字符串
内爆的结果
),而不接受
数组
,那就很奇怪了。在我的例子中,它不接受
字符串
,而是接受
数组

只要使用

$select->where->in('field_name', $your_simple_array);
如果您在使用
where()
函数之前使用了一些条件,例如

$select->where(['field_name' => $value]);
用后面的第一个,就像

$select->where(['field_name' => $value]);
$select->where->in('field_name', $your_simple_array);
始终记住不要将
where
用作函数
where()
,而应将其用作关键字

这是有效的,并由我在以下上下文中进行测试:

$select = $this->tableGateway->getSql()->select()->where(['field1' => $v1, 'field2' => $v2]);
$select->where->in('field_name', ['v1', 'v2', 'v3']);
也就是说,在模型类的开头使用这些库:

use Zend\Db\Sql\Sql;
use Zend\Db\Sql\Where;