在CodeIgniter中的Active Record查询中删除/禁用变量的反引号

时间:2017-07-05 21:19:37

标签: php mysql codeigniter

我试图在#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正确地被解析为整数。 有任何想法吗?提前谢谢。

2 个答案:

答案 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;