codeigniter - CodeIgniter 2.0.3 中 Active Record 中奇怪的反引号行为

标签 codeigniter activerecord select backticks

以前我的所有查询在 CI 2.0 版中都运行良好,但是当我升级到 时2.0.3 我的一些 SELECT 查询被破坏了。

CI 正在添加 反引号 (``) 自动,但在旧版本中,它按原样运行。

CI 用户手册已指示添加第二个参数

db->select



作为

FALSE



但它仍然不起作用。

代码如下:
class Company_model extends MY_Model
{

----------------

$this->db->select(' count('.$fieldname. ') as num_stations');
$this->db->select(" CONCAT_WS(',', clb_company.address1, clb_company.address2, clb_company.city, clb_company.state, clb_company.zipcode ) as companyAddress");
$this->db->from($this->_table);
$this->db->join($this->_table_device, $fieldname1. " = ".  $fieldname2, 'LEFT');
$this->db->where($blablafield , '0');
----------------

错误如下:
Error Number: 1064

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 
'FROM (`clb_device`) JOIN `clb_company` ON `clb_company`.`id` = `clb_device`.`com' at line 2

SELECT `clb_device`.`id` as deviceId, `clb_pricing_specifications`.`name` as pricingSpecName, `clb_company`.`name` as companyName, `clb_device`.`mac_address` as deviceMacAddress, 
`clb_device`.`reseller_model_number` as deviceModelNumber, `clb_pricing_spec_grouping`.`pricing_master_spec_id` as pricingSpecId, `clb_device`.`address` as deviceAddress, 
`clb_device`.`is_home` as deviceIsHomeCharger, CONCAT(clb_company.portal_line1, `'/'`, `clb_device`.`name)` as deviceDisplayName FROM (`clb_device`) JOIN `clb_company` 
ON `clb_company`.`id` = `clb_device`.`company_id` LEFT JOIN `clb_pricing_group_devices` ON `clb_device`.`id` = `clb_pricing_group_devices`.`device_id` and clb_pricing_group_devices.is_active = 1 
LEFT JOIN `clb_pricing_spec_grouping` ON `clb_pricing_group_devices`.`pricing_spec_id` = `clb_pricing_spec_grouping`.`pricing_master_spec_id` LEFT JOIN `clb_pricing_specifications` ON 
`clb_pricing_spec_grouping`.`pricing_spec_id` = `clb_pricing_specifications`.`id` WHERE clb_company.vendor_id is not null AND cast(substr(clb_devi
ce.software_version, 1, 3) as decimal(2,1)) > 2.0 AND clb_device.device_state > 0 GROUP BY `clb_device`.`id` ORDER BY CONCAT(trim(clb_company.portal_line1), `'/'`, trim(clb_device.name)) desc LIMIT 20

看看 CONCAT(修剪(clb_company.portal_line1),`'/'`,修剪(clb_device.name))

请提出解决方法。

最佳答案

在查询之前使用此行:

$this->db->_protect_identifiers=false;

这将停止向构建的查询添加反引号。

关于codeigniter - CodeIgniter 2.0.3 中 Active Record 中奇怪的反引号行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7482594/

相关文章:

php - CodeIgniter:图片未上传。

mysql - 具有 join 和 order by 的多个 group_by

ruby-on-rails - rails 的 activerecord 将数据存储到错误的表中

ruby-on-rails-3 - rails 事件记录分组范围

ruby-on-rails - 为新的 ActiveRecord 验证指定错误消息(存在)

mysql - 在MYSQL中获取一个月中的星期几

php - 从数据库中选择并存储在数组中

mysql - 在 MySQL 中按数字顺序排序,然后按字母顺序排序

mysql - 泛化表查询

javascript - CodeIgniter 中的图像文件、CSS 和 JS 文件