在codeigniter模型中使用foreach爆炸不起作用

时间:2016-09-10 18:36:45

标签: php codeigniter

我有一个代码,使用explode将,与字符串分开。

现在问题是foreach循环只迭代一次。我在codeigniter model

中使用了此代码

我的代码是,

//Model

        $product_id = '1,2,3';
        $products = explode(',', $product_id);

        foreach($products as $products_id) {
            echo $products_id.'<br><br>'; //output: 1
            $query = $this->db->query('SELECT * FROM tbl_products WHERE products_id = "'.$products_id.'" AND products_status = "1"');
            $count = $query->num_rows();

            if($count > 0) {
                return $result = $query->result_array();
            }
            else {
                return 0;
            }
        }

上述代码的输出为1

缺少其他数字23。我做错了什么。请帮帮我。我无法理解。

2 个答案:

答案 0 :(得分:2)

要纠正它,你可以这样做

  $product_id = '1,2,3';

  $query = $this->db->query('SELECT * FROM tbl_products WHERE products_id IN( ? ) AND products_status = "1"',$product_id);
  $count = $query->num_rows();

  if($count > 0) {
        return $query->result_array();
  }else{
        return 0;
  } 

这避免了在原始if语句中退出时返回0或0以上的结果,所以基本上是在循环的第一次迭代中。

但是,那说,可能更好的解决方法就是这个

foreach

使用IN可以避免explode'IN( "string","string", "string" )'和其他查询调用,也应该使用准备好的查询。这应该适用于数字,但字符串仍然需要用引号$string = '"string","string","string"';type作为输入,这可能会使准备好的查询变得复杂。

答案 1 :(得分:1)

您的代码中的Everthing很好。如果您想获取所有数据,那么您应该返回数组中的所有数据。检查代码:

 $product_id = '1,2,3';
        $products = explode(',', $product_id);
$data = array();

        foreach($products as $products_id) {
            echo $products_id.'<br><br>'; //output: 1
            $query = $this->db->query('SELECT * FROM tbl_products WHERE products_id = "'.$products_id.'" AND products_status = "1"');
            $count = $query->num_rows();

            if($count > 0) {
                $data[]= $query->result_array();
            }
            else {
                 $data[]= 0;
            }
        }
return $data;  

$data上..您可以根据需要对$ data执行任何操作。