此代码检查数据库中的$value
(数组)是否设置为1
。foreach循环将所有的基础匹配保存到数组$products
中。现在,数据库中的所有字段都有值1
,但这并不是我真正想要的,因为如果字段"dog"等于1
,字段"cat"等于NULL
,那么我的数组中仍然有值"dog"。只有当BOTH等于1时,它才应该到达数组。
对于简单变量,您可以使用&&
或AND
运算符来检查是否所有键都具有相同的值,但如何对数组执行此操作?
$products = array();
foreach($_POST['selected_checkboxes'] as $value) {
var_dump($value);
if($result = $db->query("SELECT * FROM produkte WHERE `$value` = 1")){
while($row = $result->fetch_object()) {
if (!in_array($row->name, $products)) {
array_push( $products, array('name'=>$row->name, 'image'=>$row->image, 'link'=>$row->link) );
}
}
}
else {
array_push($products, 'error');
}
}
更改SQL语句,使所有检查的值都等于1。
您可以为每个值附加一个" = 1 AND "
,然后在查询中使用它们。
<?php
$arr = ['field1', 'field2', 'field3'];
$condition = join(' = 1 AND ', $arr) . ' = 1';
输出为"field1 = 1 AND field2 = 1 AND field3 = 1"
。然后,您可以在查询中使用$condition
。
$db->query("SELECT * FROM produkte WHERE $condition")
更新:
要处理包含空格的字段名,您需要用反勾号包裹每个字段名,因此更改这行
$condition = '`' . join('` = 1 AND `', $arr) . '` = 1';