【问题标题】:CodeIgniter - query binding "IN" parameterCodeIgniter - 查询绑定“IN”参数
【发布时间】:2013-05-08 09:14:15
【问题描述】:

我的 CodeIgniter 中有以下查询,我正在尝试通过参数进行绑定。

$q = "SELECT * FROM my_table WHERE id IN (?)"
$ids = "1,2,3,4";
$this->db->query($q, array($ids));

上述方法不起作用,因为查询绑定将 $ids 视为字符串。如何参数化我的查询,但仍然能够执行“IN”操作?

编辑

抱歉,我必须使用“原始 SQL 查询”。上面的查询只是一个更大+复杂查询的一部分,我不能使用 ActiveRecord。我也在使用 Postgres。

【问题讨论】:

  • 也许FIND_IN_SET() ?如果没有提供合适的答案,只是一种解决方法。
  • @ericbae 我已经更新了我的答案检查。
  • @ericbae 你用单引号括住 $ids 吗???在查询中?
  • $this->db->query($q, explode(",",$ids));

标签: php sql codeigniter


【解决方案1】:

把它放在数组中,而不是字符串

$q = "SELECT * FROM my_table WHERE id IN (?)"
$ids =  array(1,2,3,4);
$this->db->query($q, $ids);

你可以在没有绑定的情况下实现同样的事情

另类

$ids =  array(1,2,3,4);
$this->db->where_in('id',$ids);
$this->db->get('my_table');

【讨论】:

  • 我在这方面遇到了一个错误——它把它解释为字符串“Array”——“id IN (Array)”上的错误
【解决方案2】:

where_in试试这个

$ids = array(1,2,3,4);
$this->db->select('*');
$this->db->from('my_Table');
$this->db->where_in('id',$ids);

【讨论】:

    【解决方案3】:
    $this->db->query($q, explode(',', $ids));
    

    $this->db->where_in('id', explode(',', $ids))->get('my_table');
    

    Active Records 文档:http://ellislab.com/codeigniter/user-guide/database/active_record.html#select

    【讨论】:

      【解决方案4】:

      像这样使用 FIND_IN_SET

      select * from table where FIND_IN_SET('$ids', id);
      

      【讨论】:

        【解决方案5】:

        试试这个代码:

        $ids = "('1','2','3','4')";
        $q = "SELECT * FROM my_table WHERE id IN ".$ids;
        $this->db->query($q);
        

        你应该使用

        $ids = array('1','2','3','4');
        $this->db->where_in('id', $ids);
        

        where_in 用于 codignitor。

        【讨论】:

        • 我认为这不会清理参数 $ids 并防止它被 SQL 注入。
        • @ericbae 如果你对 sql 注入很感兴趣,那么为什么要使用查询来执行并且 codignitor 中使用了 PDO,所以要冷静。
        【解决方案6】:

        点是

        $ids = "1,2,3,4";
        $a = array($ids);
        //$a[0] = "1,2,3,4";
        
        //not  $a[0]=1;$a[1]=2;$a[2]=3;$a[3]=4;
        

        想要保持你的风格

         $ids = "1,2,3,4";
        $a = explode(",",$ids);
        

        【讨论】:

          【解决方案7】:
          $q = "SELECT * FROM my_table WHERE id IN ?"
          $ids = "1,2,3,4";
          $this->db->query($q, explode(",", $ids));
          

          【讨论】:

            猜你喜欢
            • 2017-05-28
            • 1970-01-01
            • 2011-08-24
            • 2016-11-14
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多