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

PDO绑定MySQL日期变量后LIKE查询无匹配结果的问题

问题排查与解决方案

你的问题出在绑定参数的写法错误,导致占位符没有被正确解析为变量值,而是被当作字符串的一部分处理。

错误原因分析

当你写LIKE "%:lastweek%"时,MySQL会把:lastweek当成字符串的一部分去匹配,实际执行的SQL是找date字段中包含:lastweek这个子串的记录,而不是你传入的日期值,所以自然没有结果。

正确的两种写法

写法一:在绑定变量时拼接通配符%

修改SQL语句,去掉里面的%,直接用占位符:

$sql = 'SELECT `date` FROM `sessions` WHERE `date` LIKE :lastweek';

然后在绑定变量时,把%和日期值拼接在一起:

$stmt->bindValue(':lastweek', "%{$lastWeek}%", PDO::PARAM_STR);

写法二:在SQL中用CONCAT函数拼接通配符

保持变量为纯日期值,在SQL里通过CONCAT把%和占位符拼接:

$sql = 'SELECT `date` FROM `sessions` WHERE `date` LIKE CONCAT(\'%\', :lastweek, \'%\')';

然后正常绑定日期变量即可:

$stmt->bindValue(':lastweek', $lastWeek, PDO::PARAM_STR);

额外注意事项

  1. 表名一致性:你之前的测试代码里出现过sessions和lift_sessions两个表名,确认实际查询的表名是否正确,避免因表名错误导致无结果。
  2. 字段类型优化:如果date字段是DATE类型,不需要用LIKE,直接用WHERE date = :lastweek即可,效率更高;如果是DATETIME/TIMESTAMP类型,也可以用WHERE DATE(date) = :lastweek来匹配日期部分,同样比LIKE更高效。

内容的提问来源于stack exchange,提问作者grzybowski1911

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 22:24:31