问题
Im trying to select some values using a custom string. below is my code
$this->db->from('posted');
$st="infor='rent' AND (typeq='in' OR typeq='out')";
$this->db->where($st);
$q = $this->db->get();
A Database Error Occurred
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
i think the problem is coz of
WHERE `infor='rent'`
when i manualy execute this code it works perfectly.
WHERE infor='rent'
how do i get rid of
``
because its automatically added
回答1:
Add a third parameter to the where()
and set it to 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()
accepts an optional third parameter. If you set it toFALSE
, CodeIgniter will not try to protect your field or table names with backticks.
CodeIgniter Documentation
回答2:
While the solution works I wanna add: Be careful! You need to secure your query and escape all values! If you like to use the Query Builder
$q = $this->db->select('*')->from('posted_ads')
->where('infor', 'rent')
->or_group_start()
->where('typeq', 'in')
->where('typeq', 'out')
->group_end()
->get();
This way Codeigniter takes care of proper escaping.
来源:https://stackoverflow.com/questions/7547731/codeigniter-this-db-where-custom-string-problem