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
相关产品推荐
相关产品推荐

