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

使用date_format()后MySQL日期无法在HTML表格显示的问题排查

问题原因与解决方案

我一眼就发现问题所在了——你的SQL查询里对日期字段用了DATE_FORMAT函数,但没给格式化后的列指定别名,导致PHP用$row['podate']和$row['tentdate']根本拿不到对应的值。

具体分析

在MySQL命令行执行查询时,MySQL会自动给无别名的格式化列分配一个默认列名(比如date_format(podate, '%d-%m-%Y')),所以你能看到日期结果;但PHP的fetch_assoc()是通过键名取值的,你用的原始字段名podate、tentdate在返回的结果集里不存在,自然就显示为空了。

修复步骤

  1. 给格式化日期列添加别名,修改你的SQL语句:
$sql="select cname, 
             date_format(podate, '%d-%m-%Y') AS podate, 
             started, 
             reason, 
             date_format(tentdate, '%d-%m-%Y') AS tentdate, 
             progress, 
             status 
      from info where cname='$searchstr';";

用AS podate和AS tentdate给格式化后的列指定和原字段名一致的别名,这样$row['podate']和$row['tentdate']就能正确获取到格式化后的日期值了。

  1. 紧急修复SQL注入风险:
    你的代码直接把$_GET['cname']拼进SQL里,存在严重的SQL注入漏洞。建议改用预处理语句规避风险,示例代码如下:
// 替换原SQL与查询逻辑
$sql="select cname, 
             date_format(podate, '%d-%m-%Y') AS podate, 
             started, 
             reason, 
             date_format(tentdate, '%d-%m-%Y') AS tentdate, 
             progress, 
             status 
      from info where cname=?;";
$stmt = mysqli_prepare($conn, $sql);
mysqli_stmt_bind_param($stmt, "s", $searchstr);
mysqli_stmt_execute($stmt);
$result = mysqli_stmt_get_result($stmt);

这种方式能避免恶意参数破坏SQL结构,大幅提升代码安全性。

额外排查技巧

可以在fetch_assoc()后用var_dump($row)打印结果集,看看实际返回的键名是什么——这是排查字段取值问题的常用方法,能帮你快速定位不匹配的键名。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 21:27:29