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

MySQL查询中VARCHAR类型日期字段匹配无结果问题求助

问题原因整理

  • 参数绑定不匹配:SQL语句里声明的占位符是:datefrom,但绑定时错写为:orderdate,且你没有定义$orderdate变量,实际获取的日期参数存储在$datefrom中,直接导致查询条件失效。
  • 查询逻辑错误:你当前写的筛选条件是orderdate < :datefrom,对应要查找的是小于起始日期2021-07-03的数据,和你需要的2021-07-03到2021-07-30的区间需求完全不符,且传入的dateto参数完全没有用到。
  • 语法不规范:$_POST的键名建议加单引号,避免PHP将其识别为常量抛出警告。
  • 日期格式兼容:orderdate是VARCHAR类型的情况下,只要表中存储的日期格式和你传入的YYYY-MM-DD格式完全一致,字符串比较可以正常生效;如果存储格式不同,用数据库自带的日期转换函数处理即可,比如MySQL的STR_TO_DATE(orderdate, '实际存储格式占位符'),不需要修改字段类型。

修正后代码参考

// 取POST参数加引号避免语法警告
$stationerytype = $_POST['stationerytype'];
$datefrom = $_POST['datefrom'];
$dateto = $_POST['dateto'];

// 修改为正确的区间筛选条件,占位符和参数一一对应
$sql = "SELECT SUM(stationeryqtyrecd) AS totalrecd FROM tblstationerystock WHERE stationerytype = :stationerytype AND orderdate >= :datefrom AND orderdate <= :dateto"; 
$query = $dbh->prepare($sql);
$query->bindValue(':stationerytype', $stationerytype, PDO::PARAM_STR);
$query->bindValue(':datefrom', $datefrom, PDO::PARAM_STR);
$query->bindValue(':dateto', $dateto, PDO::PARAM_STR);
$query->execute();
$totalrecd = $query->fetchColumn();
?>
<td class="center"><?php echo $totalrecd ?: 0; ?></td>

补充:输出时加?:0可以避免无匹配数据时输出空白,直接显示0更符合业务逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 01:06:00