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

如何获取用户注册日期?查询后重复显示同一日期的问题排查

问题:查询2022-01-25后注册用户的日期,结果始终显示相同值

问题描述

想要展示2022-01-25之后注册的用户的注册日期,但执行以下代码后,所有输出的日期都是相同的:

$sqlQuery = 'SELECT * FROM _users WHERE user_registered > "2022-01-25"';
$recipesStatement = $bdd->prepare($sqlQuery);
$recipesStatement->execute();
$recipes = $recipesStatement->fetchAll();

// 逐个输出日期
foreach ($recipes as $recipe) {
?>
    <p><?php echo $recipe['user_registered']; ?></p>
    
<?php
}

可能的原因及解决步骤

  • 先验证数据库数据与SQL查询结果
    直接在数据库管理工具(如phpMyAdmin、Navicat)中执行这条SQL语句,查看返回的user_registered字段值是否本身就重复:

    SELECT * FROM _users WHERE user_registered > "2022-01-25"
    

    如果查询结果里日期确实全部相同,说明问题出在数据库数据上,需要检查用户注册逻辑是否正确写入了日期。

  • 检查字段类型与查询条件
    如果user_registered是datetime或timestamp类型,仅使用日期字符串"2022-01-25"会被解析为2022-01-25 00:00:00,这会筛选出该时间点之后的用户;如果你的需求是排除2022-01-25当天所有用户,条件没问题,但如果要包含当天非零点的用户,可调整为:

    SELECT * FROM _users WHERE user_registered >= "2022-01-25 00:00:00"
    

    注意:若用DATE(user_registered) > "2022-01-25"来比较日期部分,可能导致字段索引失效,数据量大时不推荐。

  • 调试代码返回结果
    在fetchAll()之后添加var_dump($recipes);,打印所有查询到的数据,确认数组中的user_registered值是否真的重复,排除输出环节的问题:

    $recipes = $recipesStatement->fetchAll();
    var_dump($recipes); // 查看返回的原始数据
    
  • 确认字段名正确性
    检查数据库表_users中是否确实存在user_registered字段,部分数据库(如MySQL在区分大小写的系统中)对字段名大小写敏感,确保代码中的字段名与数据库完全一致。

  • 推荐使用参数绑定(安全优化)
    硬编码SQL值存在注入风险,建议改用参数绑定,同时修正变量命名混乱的问题:

    $sqlQuery = 'SELECT * FROM _users WHERE user_registered > :registered_date';
    $stmt = $bdd->prepare($sqlQuery);
    $stmt->execute(['registered_date' => '2022-01-25']);
    $users = $stmt->fetchAll();
    
    foreach ($users as $user) {
        echo "<p>{$user['user_registered']}</p>";
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 21:22:02