【问题标题】:How to pass current date to a PHP function and use it in an SQL query's where condtion?如何将当前日期传递给 PHP 函数并在 SQL 查询的 where 条件中使用它?
【发布时间】:2013-10-21 07:43:53
【问题描述】:

我的 MySQL 数据库中有一个名为 users 的表。此表中有一个名为user_reg_date(bigint(12)) 的列,用于存储该用户的注册日期。

此列以 UNIX 时间戳格式存储注册日期。我是 PHP 中这个 UNIX 时间戳和日期操作的新手。 现在我的要求是我想将当前日期传递给一个函数并获取注册日期为当前日期的用户数(即今天注册的用户数)。

我不知道如何将当前日期传递给函数并获取将注册日期作为当前日期的用户计数。我在下面给出我的 PHP 函数代码。

/*The argument `$todays_date` I'm passing is dummy, please guide me how to pass the date also*/
    function GetRegisteredUsersCount($todays_date) { 
        $sql  = " SELECT count(*) as registered_users_count FROM ".TBL_USERS;
        $sql .= " WHERE user_reg_date ='".$todays_date."' ";

        $this->mDb->Query( $sql);
        $data = $this->mDb->FetchArray(MYSQL_FETCH_SINGLE);

        return $data;    
      }

【问题讨论】:

  • 这会及时回来咬你。如果您在列中使用 MySQL DATE 格式,这是一个简单的问题。如果可以,请更改它。
  • @MikeW:不,我不能更改日期格式。我无法对数据库设计进行任何更改。

标签: php mysql sql date unix-timestamp


【解决方案1】:

由于您的日期存储为整数,因此您需要使用从今天开始到(不包括)第二天开始的范围进行查询。

$today = strtotime('today');
$tomorrow = strtotime('+1 day', $today);

$sql .= sprintf(
    " WHERE user_reg_date >= %d AND user_reg_date < %d", 
    $today, 
    $tomorrow
);

另请参阅:strtotime()

顺便说一句,建议在使用 64 位整数的平台上运行。

【讨论】:

    【解决方案2】:

    您应该将 user_reg_date(bigint(12)) 字段类型更改为时间戳并将其默认设置为 CURRENT_TIMESTAMP。每当新用户注册时,它将自动选择当前日期时间。当你想知道今天有多少用户注册时,只需点击查询:-

    $sql  = "SELECT count(*) as registered_users_count from tb_users where datediff(CURDATE(),DATE(user_reg_date)) =0"
    

    【讨论】:

    • :我无法对数据库设计进行任何更改。所以我不能改变数据类型(bigint(12) 到时间戳)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-17
    • 1970-01-01
    • 1970-01-01
    • 2021-09-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多