我试图使用自定义字符串选择一些值。下面是我的代码
$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'
如何摆脱
``
因为它自动添加了
答案 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将不会尝试使用反引号来保护您的字段或表名。
答案 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负责适当的转义。