【问题标题】:How to select data with array value on where clause with ajax - codeigniter如何使用ajax在where子句中选择具有数组值的数据 - codeigniter
【发布时间】:2021-07-31 11:45:15
【问题描述】:

我的视图中有一个名为categories[] 的多项选择,其中包含我表上id 的值。我想从categories[] 中获取值并用它创建一个where 子句:Where id = categories[] selected values。但是,它是一个数组。如何使用数组值设置 Where 子句?所以我可以从categories[]中获取id具有选定值的数据

我的表中有 3 列:

(id, category, name).

我的表的值是:

(1, "food", "Pizza")
(2, "food", "Burger")
(3, "drink", "Mineral Water")
(4, "drink", "Tea")
(5, "snack", "Apple Pie")

我所做的是:通过在我的视图中执行此命令来获取选定的值:

var v = $('[name="categories[]"]').val();

//and doing like this, so I can get it to my controller
"data": 'cat=' + v,

然后,我在控制器中得到选择的值,如下所示:

public function getData(){
   $cat = $this->input->post('cat');
   $where = array('id' => [$cat]);
   $result = $this->my_model->getData($where);

   //and some code to set the data in my table
   //and code for return the data
}

最后,我在我的模型中设置了 WHERE 子句,如下所示:

public function getData($where){
   $this->db->select('*');
   $this->db->from($this->table);
   $this->db->where($where);

   $query = $this->db->get();
   return $query->resut();
}

我在上面所做的查询如下:

Unknown column 'Array' in 'where clause'

SELECT `id`, `category`, `name` FROM `my_table` WHERE `id`= Array ORDER BY `category` ASC

【问题讨论】:

    标签: php arrays ajax codeigniter where-clause


    【解决方案1】:

    您需要的 SQL 是 WHERE IN,查询如下所示

    SELECT * FROM table WHERE id IN (12,14,55,346);
    

    在你的第一个函数中,确保 $cat 是一个数组

    public function getData(){
       $cat = $this->input->post('cat');
       if (!is_array($cat)) $cat = explode(",", $cat);
       $where = array('id' => $cat);
       $result = $this->my_model->getData($where);
    }
    

    然后在你的模型中使用 where_in()

    public function getData($where){
       $this->db->select('*');
       $this->db->from($this->table);
       $this->db->where_in($where);
       $query = $this->db->get();
       return $query->result();
    }
    

    https://codeigniter.com/userguide3/database/query_builder.html#selecting-data

    【讨论】:

    • 我刚刚纠正了一个错字,以防您遇到错误 - inArray() 应该是 in_array() - 并且 implode() 应该是 explode() - 更正
    • 嗨,其实。我一直困惑到现在。我从正确的类别中获取数组,但我很困惑,如何在我的控制器中获取数组数据?我尝试过使用这个$cats = $this->input->post('cat');,但是当我尝试使用echo $cats 时,它返回空值
    • 而且,当我尝试通过发出包含var v 值的警报来检查var v 的值时,它会显示正确的数组值。 ex : 5,2,7 作为我选择的值
    • 在您的控制器功能中,输入if ($_POST) var_dump($_POST); 行以查看您通过帖子获得的内容。听起来 cat 变量被称为不同或缺失的东西
    • 你能检查一下这个问题吗?我认为导致我的值为 null 的问题是因为这个stackoverflow.com/questions/67496628/…
    猜你喜欢
    • 2021-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多