2015-10-28 28 views
1

该代码检查$value(数组)是否在数据库中设置为1。 foreach循环将所有创建的匹配保存到数组中。现在我有数据库中的所有字段值为1,但这并不是我想要的,因为如果字段'狗'等于1并且字段'猫'等于NULL,我仍然具有'狗'的值我的阵列。只有当BOTH等于1时才能进入阵列。对数组使用&&/AND运算符

对于简单变量,您可以使用&&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'); 
    } 
} 
+0

不太清楚。你想在这里实现什么 –

+1

为什么不只是扩展你的sql语句。这将更快,并节省您一些PHP代码 – Philipp

+0

@Philipp我会怎么做在这种情况下? –

回答

1

改变你的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") 

UPDATE:

为了应付包含字段名空间,你需要换用反引号每个字段名,以便改变这一行

$condition = '`' . join('` = 1 AND `', $arr) . '` = 1'; 
+0

非常感谢,这是一个了不起的解决方案!但仍然存在一些小问题。在我的一些列名称中有空格。正如你在我的代码中看到的,我使用''value''(带引号)。我怎样才能在你的代码中做到这一点?当我尝试''$条件''它不会工作。 –

+0

你必须在反引号中包装字段名,所以改为'$ condition ='\''。 join('\'= 1 AND \'',$ arr)。 '\'= 1';' – RiggsFolly

+2

@nopro希望你不要介意我编辑你的答案。看起来比自己写一个更好的主意,因为你真的已经回答了原始问题 – RiggsFolly