首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在PostgreSQL语句的where子句中获取用户输入数据?

如何在PostgreSQL语句的where子句中获取用户输入数据?
EN

Stack Overflow用户
提问于 2017-04-16 02:26:04
回答 3查看 163关注 0票数 0

我有一个查询,其中where子句是

代码语言:javascript
运行
复制
WHERE (NOW()::DATE - coalesce(orders.delivery_date::DATE, NOW()::DATE)) <= 30

对于交货日期离当前日期不到一个月的订单,这很有效。但是,我需要灵活地接受用户输入的日期,而不是总是使用当前日期。

当用户输入日期时,我的php代码获取输入,如果我回显出来,则以此格式返回它。

代码语言:javascript
运行
复制
mm/dd/yyyy

如果我给用户输入日期一个可验证的名称,如下所示

代码语言:javascript
运行
复制
$user_date

然后,我需要一个SQL查询

代码语言:javascript
运行
复制
WHERE ($user_date::DATE - coalesce(orders.delivery_date::DATE, $user_date::DATE)) <= 30 

但是我不知道如何为用户输入的日期设置PHP变量的格式,以使查询生效。基本上,我需要使用$user_date而不是NOW()。有什么建议吗?仅供参考,发货日期字段类型为不带时区的时间戳。

EN

回答 3

Stack Overflow用户

发布于 2017-04-16 02:42:57

您应该使用explode分解用户输入。

代码语言:javascript
运行
复制
 $date = explode("/", $user_date);

然后,您需要按照与数据库相同的顺序将数组项放回一起

代码语言:javascript
运行
复制
$date = $date[2].'-'.$date[1].'-'.$date[0];
票数 0
EN

Stack Overflow用户

发布于 2017-04-16 02:52:47

我将获取日期时间戳并将其作为整数传递(传递整数可以更容易地防止sql注入)。在postgres方面,我会将int转换回timestamp:

代码语言:javascript
运行
复制
$timestamp = strtotime('15-04-2017');

代码语言:javascript
运行
复制
timestamp with time zone 'epoch' + $timestamp  * INTERVAL '1 second'
票数 0
EN

Stack Overflow用户

发布于 2017-04-16 04:54:23

我想出了一个从数据库中提取数据的解决方案。

代码语言:javascript
运行
复制
$sql_date = date("Y-m-d H:i:s",strtotime($user_date));

然后是我的SQL中的WHERE子句

代码语言:javascript
运行
复制
WHERE ('$sql_date'::DATE - coalesce(orders.delivery_date::DATE, '$sql_date'::DATE)) <= 30
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43429718

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档