【问题标题】:Simple query with foreach loop does not work, but without works使用 foreach 循环的简单查询不起作用,但不起作用
【发布时间】:2017-04-04 20:26:26
【问题描述】:

我遇到了一个毫无意义的查询问题。

public function getGroup(){

    if(2 > 0){
        $query = "SELECT * FROM products ";
        $array = array(1);
        foreach($array as $n){
            $query .= " AND ID '$n'";
        }
        return $query;
    } else{
        $query = "SELECT * FROM products WHERE ID = 1 ";
        return $query;
    }
}

【问题讨论】:

  • 你的代码没有意义,我们需要一些上下文。
  • (1) 这应该是什么:“AND ID '$n'”? (2) 创建查询后将其打印出来似乎是查看问题的一种明显方式。
  • 您的查询将类似于SELECT * FROM products AND ID <someId>,这是不正确的。您缺少 WHERE 子句。至少这是我从上面的代码中可以理解的。
  • $query .= " AND ID '$n'"; 删除 AND 而不是 AND 使用 WHERE。 $query .= " Where ID '$n'";
  • 那些错别字会让你每次都犯错。 不要对您的原始问题进行修改,因为这可能会使好的答案无效。

标签: php sql pdo foreach


【解决方案1】:

您的 if 语句中没有 WHERE。因此,您的查询将如下所示:SELECT * FROM products AND ID '$n'.... 还要注意 ID 之后没有 =

    public function getGroup(){

        if(2 > 0){
            $query = "SELECT * FROM products WHERE";
            $array = array(1);
            $i=0;
            foreach($array as $n){
                if($i==0) {
                    $query .= " ID = '$n'";
                }
                else {
                    $query .= " AND ID = '$n'";
                }
                $i++;
            }
            return $query;
        } else{
            $query = "SELECT * FROM products WHERE ID = 1 ";
            return $query;
        }
    }

【讨论】:

  • 你很接近,但仍然不正确。现在 OPs 查询看起来像SELECT * FROM products WHERE AND ID = <someID>。为foreach 循环的第一次迭代设置一个条件,不添加AND 部分。
  • 仍然不正确$nforeach之前不存在。
  • 刚才看到了。可能会起作用,因为我现在有了答案,虽然不是 100% 确定
  • $i 将始终为 0,因为您没有增加值。
  • 现在看起来好多了?
【解决方案2】:

我想你想要这样

public function getGroup(){
    if(2 > 0){
        $array = array(1);
        $query = "SELECT * FROM products WHERE ID in ('$array')";           
        return $query;
    } else{
        $query = "SELECT * FROM products WHERE ID = 1 ";
        return $query;
    }
}

【讨论】:

  • 你“认为”为什么? 好的答案将始终解释所做的事情以及为什么以这种方式完成,不仅是为了 OP,也是为了 SO 的未来访问者。跨度>
  • 我认为s78想要根据ids数组记录
  • 如果您认为这是您的答案的一部分。
  • 这不是你的回答是不正确的
  • 答案可能是正确的,只是没有解释做了什么以及为什么这样做。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多