Php Zend框架Mysql WHERE IN子句
使用zend框架,我使用了一个查询,有一个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] =&
$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;