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

