我有一个查询,其中where子句是
WHERE (NOW()::DATE - coalesce(orders.delivery_date::DATE, NOW()::DATE)) <= 30对于交货日期离当前日期不到一个月的订单,这很有效。但是,我需要灵活地接受用户输入的日期,而不是总是使用当前日期。
当用户输入日期时,我的php代码获取输入,如果我回显出来,则以此格式返回它。
mm/dd/yyyy如果我给用户输入日期一个可验证的名称,如下所示
$user_date然后,我需要一个SQL查询
WHERE ($user_date::DATE - coalesce(orders.delivery_date::DATE, $user_date::DATE)) <= 30 但是我不知道如何为用户输入的日期设置PHP变量的格式,以使查询生效。基本上,我需要使用$user_date而不是NOW()。有什么建议吗?仅供参考,发货日期字段类型为不带时区的时间戳。
发布于 2017-04-16 02:42:57
您应该使用explode分解用户输入。
$date = explode("/", $user_date);然后,您需要按照与数据库相同的顺序将数组项放回一起
$date = $date[2].'-'.$date[1].'-'.$date[0];发布于 2017-04-16 02:52:47
我将获取日期时间戳并将其作为整数传递(传递整数可以更容易地防止sql注入)。在postgres方面,我会将int转换回timestamp:
$timestamp = strtotime('15-04-2017');timestamp with time zone 'epoch' + $timestamp * INTERVAL '1 second'发布于 2017-04-16 04:54:23
我想出了一个从数据库中提取数据的解决方案。
$sql_date = date("Y-m-d H:i:s",strtotime($user_date));然后是我的SQL中的WHERE子句
WHERE ('$sql_date'::DATE - coalesce(orders.delivery_date::DATE, '$sql_date'::DATE)) <= 30https://stackoverflow.com/questions/43429718
复制相似问题