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

PHP新手求助:PostgreSQL查询中如何实现日期比较

解决PostgreSQL中日期比较的问题

嘿,作为PHP和PostgreSQL新手碰到日期筛选的问题太正常了,我来帮你把这个问题捋清楚~

首先得指出你代码里的小问题:你用了Date()函数,但这是MySQL里的写法,而你用的是PostgreSQL(从pg_query能看出来),PostgreSQL有自己的获取当前日期的函数,咱们一步步改:

1. 选对PostgreSQL的当前日期函数

首先得确认你的invalid_from_shortcode字段是什么数据类型:

  • 如果是纯日期类型(DATE):用CURRENT_DATE,它会返回当前系统的日期(不带时分秒)
  • 如果是带时间戳的类型(TIMESTAMP/TIMESTAMPTZ):用NOW()或者CURRENT_TIMESTAMP,返回当前日期+时间

2. 修正后的完整代码

这里假设你的字段是DATE类型,把查询语句改了之后,代码应该是这样的:

<?php
require 'db.php';

// 根据字段类型选择对应的函数,这里用CURRENT_DATE为例
$sql = "SELECT * FROM shortcode WHERE invalid_from_shortcode < CURRENT_DATE";
$result = pg_query($sql);

if (!$result) {
    echo "查询出现问题: " . pg_last_error();
    exit();
}

// 可以在这里遍历查询到的结果
while ($row = pg_fetch_assoc($result)) {
    // 比如打印每行数据,或者做你需要的处理
    print_r($row);
}
?>

3. 额外要注意的点

  • 字段类型确认:如果你的invalid_from_shortcode是字符串类型(不太推荐这么存日期),那得先把它转成日期再比较,比如:
    SELECT * FROM shortcode WHERE TO_DATE(invalid_from_shortcode, 'YYYY-MM-DD') < CURRENT_DATE
    
    当然最好的方式是直接把字段改成DATE或者TIMESTAMP类型,避免后续麻烦。
  • SQL注入防护:虽然这次的查询用的是数据库自带的日期函数,没有用户输入,但如果以后要用到用户提供的日期参数,一定要用参数化查询,比如:
    $targetDate = '2024-05-01';
    $sql = "SELECT * FROM shortcode WHERE invalid_from_shortcode < $1";
    $result = pg_query_params($sql, array($targetDate));
    
    这样能避免SQL注入风险,也更规范。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:21:17