You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 21:50:05