PHP数据库查询中如何去除日期字符串多余的单引号?
解决PHP数据库查询中日期参数多余单引号的问题
你的问题出在参数占位符?被错误地包裹在了单引号中,数据库查询构建器(从代码判断是CodeIgniter的DB类)会自动为字符串类型的参数添加单引号,手动添加的单引号会和自动生成的单引号冲突,导致出现多余的单引号。
修正后的代码
// 移除占位符两侧的单引号,直接使用?作为占位符 $query .= " AND isnull(try_convert(datetime,a.transactiondate,103),a.createddate) between ? AND ?"; // 在参数中直接拼接日期与时间部分 $param[] = $dateFrom . ' 00:00:00'; $param[] = $dateTo . ' 23:59:59'; $sql = $this->db->query($query, $param); return $sql->result_array();
原理说明
当你把?放在单引号里时,查询构建器会将'? 00:00:00'视为一个完整的字符串模板,替换?时会自动为参数值$dateFrom加上单引号,最终就变成了''2021-01-01' 00:00:00'——也就是原始单引号+参数自动添加的单引号+日期值+原始单引号,造成了多余的单引号。
移除占位符周围的单引号后,查询构建器会正确处理参数的引号包裹,同时你在参数中提前拼接好日期和时间,就能生成符合预期的SQL语句:
AND isnull(try_convert(datetime,a.transactiondate,103),a.createddate) between '2021-01-01 00:00:00' AND '2021-11-26 23:59:59'
内容的提问来源于stack exchange,提问作者agam theos
相关产品推荐
相关产品推荐

