【发布时间】:2015-01-29 00:43:47
【问题描述】:
我在使用 sqlsrv 驱动程序的 Codeigniter Active Record 类时遇到问题。当我在 select 子句上使用特定的连接条件或函数时,Codeigniter 会添加双引号,这会导致 SQL SERVER 2012 出错。例如:
$this->db->select('data,tab,tma');
$this->db->from('abHistorico as ab');
$this->db->join('tmap','ab.id_fila = tmap.id_fila AND ab.data BETWEEN data_inicial AND data_final','LEFT');
$this->db->where('data BETWEEN "$date_star" AND "$date_end"');
在这些情况下,SQL SERVER 会抛出以下错误:
“BETWEEN”附近的语法错误 从 "abHistorico" 中选择 "data"、"tab"、"tma" 作为 "ab" 左连接 "tmap" ON "ab"."id_fila" = "tmap"."id_fila" AND "ab"."data" " BETWEEN" "data_initial" AND data_final WHERE data BETWEEN "$date_star" AND "$date_end"
如您所见,BETWEEN 有双引号。我可以使用第三个 false 参数,但是将 Active Record 中的每个方法都放入其中是很烦人的。另一个例子是在 select 子句中使用函数,例如 CONVERT(varchar(10),data,103) 或类似的东西。
我担心禁用逃生,但对我来说,这是正常工作的必要条件。 我正在使用:PHP 5.5,SQL SERVER 2012
【问题讨论】:
-
使用 CI 2.x 我没有这个问题,但现在我正在迁移到 CI 3.x,它发生的情况完全相同。你解决了吗?
标签: php sql-server codeigniter