codeigniter传递数组来查询

时间:2011-03-03 01:21:28

标签: php sql arrays codeigniter pdo

我正在尝试将数组传递给具有查询的模型。我不确定如何正确传递数组,或者我必须以某种方式操纵数组。

我有这个数组:

Array
(
    [0] => 1
    [1] => 2
)

我有一个控制器:

$ratings = $this->login_model->get_ratings($mechanicIds);   // get the mechanic ratings

我有这个型号:

  function get_ratings($mechanicId)
    {
        $sql = "select m.mechanic_id, 
                   m.mechanic_name, 
                   m.city, 
                   m.state, 
                   count(mr.rating_id) as num_ratings, 
                   round(avg(mr.rating_id),2) avg_rating
                from mechanic m, mechanic_rating mr, rating r
                where m.mechanic_id in (?)
                and m.mechanic_id = mr.mechanic_id
                and mr.rating_id = r.rating_id";

        $query = $this->db->query($sql, $mechanicId);

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

它实际上返回结果,但问题是它只返回结果1行应该返回2,因为我的数组中有2个结果。谁知道我做错了什么?

2 个答案:

答案 0 :(得分:2)

我发现这个问题有所帮助。

以下是我使用的代码。

包含此内容的控制器:

                $mIds_size = count($mIds);
                $i = 1;

                foreach($mIds as $row)
                {
                    if($i == $mIds_size)
                    {
                        $mechanicIds .= $row;
                    }
                    else
                    {
                        $mechanicIds .= $row.', ';
                    }
                    $i++;
                }

                $ratings = $this->login_model->get_ratings($mechanicIds);   // get the mechanic ratings 

包含此内容的模型:

    function get_ratings($mechanicId)
    {

        $this->db->escape($mechanicId);

        $sql = "select m.mechanic_id, 
                       m.mechanic_name, 
                       m.city, 
                       m.state, 
                       count(mr.rating_id) as num_ratings, 
                       round(avg(mr.rating_id),2) avg_rating
                from mechanic m, mechanic_rating mr, rating r
                where m.mechanic_id in ($mechanicId)
                and m.mechanic_id = mr.mechanic_id
                and mr.rating_id = r.rating_id
                group by mechanic_id";

        $query = $this->db->query($sql, $mechanicId);

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

答案 1 :(得分:1)

更改此行:

$query = $this->db->query($sql, $mechanicId);

到此:

$query = $this->db->query($sql, array(implode(', ',$mechanicId)));

根据the manual