【发布时间】:2017-07-05 21:19:36
【问题描述】:
我正在尝试使用 CodeIgniter 的查询类对我的数据库进行“介于”查询,但是,当向 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 被正确地解析为整数。 有任何想法吗?提前致谢。
【问题讨论】:
-
您的问题是缺少反引号,特别是这里
discounts.from不是因为有他们,所以保留了from这个词。 -
它没有刻度,因为我只是将 _protect_identifiers 设置为 false。如果我启用它,则查询的其余部分都有反引号,包括来自的折扣。
-
我使用正确的 SQL 而不是他们愚蠢的查询生成器,此外你不应该像
?那样输入然后提供值或其他东西。否则这对于 SQL 注入来说已经成熟了......只是说。
标签: php mysql codeigniter