codeigniter $ this-> db-> where();自定义字符串问题

时间:2011-09-25 18:43:13

标签: php codeigniter

我试图使用自定义字符串选择一些值。下面是我的代码

  $this->db->from('posted');
  $st="infor='rent' AND (typeq='in' OR typeq='out')";
  $this->db->where($st);  
  $q = $this->db->get();  
  

发生数据库错误

Error Number: 1054

Unknown column ‘infor=‘rent’’ in ‘where clause’
SELECT * FROM (`posted_ads`) WHERE `infor=‘rent’` AND (typeq=‘in’
 OR typeq=‘out’)
Filename: C:\wamp\www\parklot\system\database\DB_driver.php
Line Number: 330

我认为问题是因为

WHERE `infor='rent'` 

当我手动执行此代码时,它可以完美运行。

WHERE infor='rent' 

如何摆脱

`` 

因为它自动添加了

2 个答案:

答案 0 :(得分:22)

where()添加第三个参数并将其设置为FALSE

  $this->db->from('posted');
  $st="infor='rent' AND (typeq='in' OR typeq='out')";
  $this->db->where($st, NULL, FALSE);  
  $q = $this->db->get();
  

$this->db->where()接受可选的第三个参数。如果将其设置为FALSE,CodeIgniter将不会尝试使用反引号来保护您的字段或表名。

CodeIgniter Documentation

答案 1 :(得分:0)

虽然该解决方案有效,但我想补充一点:注意!您需要保护您的查询并转义所有值!如果您想使用查询生成器

$q = $this->db->select('*')->from('posted_ads')
    ->where('infor', 'rent')
    ->or_group_start()
            ->where('typeq', 'in')
            ->where('typeq', 'out')
    ->group_end()
->get();

这种方式,Codeigniter负责适当的转义。