我有一个代码,使用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
。
缺少其他数字2
和3
。我做错了什么。请帮帮我。我无法理解。
答案 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执行任何操作。