我试图在#34;之间做一个"使用CodeIgniter的Query Class查询我的数据库,但是,当向where子句添加变量时,它会向变量添加反引号。
$this->db->select(TABLE_DISCOUNTSCARRIER.'.discount')->select(TABLE_DISCOUNTSCARRIER.'.idCarrier')
$this->db->from(TABLE_DISCOUNTSCARRIER);
$this->db->join(TABLE_DISCOUNTS, TABLE_DISCOUNTSCARRIER.'.idDiscount='.TABLE_DISCOUNTS.'.idDiscount');
$this->db->where(TABLE_DISCOUNTSCARRIER.'.idCarrier', $carrier);
$this->db->where($data['from'].' BETWEEN '.TABLE_DISCOUNTS.'.from AND '.TABLE_DISCOUNTS.'.to');
$this->db->or_where($data['to'].' BETWEEN '.TABLE_DISCOUNTS.'.from AND '.TABLE_DISCOUNTS.'.to');
正在解析这个(最后两行)
SELECT
discountbycarrier.discount,
discountbycarrier.idCarrier
FROM (discountbycarrier)
JOIN discounts
ON discountbycarrier.idDiscount=discounts.idDiscount
WHERE `discountbycarrier`.`idCarrier` = '6'
AND `5` BETWEEN discounts.from AND discounts.to
OR `10` BETWEEN discounts.from AND discounts.to
已经尝试设置$ this-> db-> _protect_identifiers = false;但它删除了其余语句的反引号,但没有删除变量。已经尝试使用变量的intval(),但这都不起作用。 正如您所看到的,变量$ carrier正确地被解析为整数。 有任何想法吗?提前谢谢。
答案 0 :(得分:0)
更改此
discounts.from
到
discounts.`from`
或者更好(最佳做法)不对表格列使用保留关键字,换句话说,单词FROM
是查询语言的一部分。
反引号用于转义保留的关键字和空格。
<强>更新强>
像这样的东西(虽然我没有查看文档)
$this->db->where('? BETWEEN '.TABLE_DISCOUNTS.'.from AND '.TABLE_DISCOUNTS.'.to', $data['from']);
答案 1 :(得分:0)
在查询之前添加此内容
$this->db->_protect_identifiers=false;