2017-04-15 43 views
0

我有一個查詢中的where子句如何獲取用戶輸入的日期在PHP中一個PostgreSQL語句的where子句中使用?

WHERE (NOW()::DATE - coalesce(orders.delivery_date::DATE, NOW()::DATE)) <= 30 

,這非常適用於拉訂單的交貨日期發生不到從當前日期一個月哪裏。但是,我需要靈活地爲用戶輸入日期,而不是始終使用當前日期。

當用戶輸入的日期,那麼我的PHP代碼獲取輸入並在此格式返回它,如果我贊同它

mm/dd/yyyy 

如果我給了用戶輸入的日期一樣

$user_date 
一個veriable名

然後我需要

WHERE ($user_date::DATE - coalesce(orders.delivery_date::DATE, $user_date::DATE)) <= 30 

的SQL查詢,但我沒有搞清楚如何格式化PH P變量用於查詢工作的用戶輸入日期。基本上,我需要使用$ user_date而不是NOW()。有什麼建議?僅供參考,交貨日期的字段類型是沒有時區的時間戳。

回答

0

你應該使用爆炸打破了用戶輸入。

$date = explode("/", $user_date); 

然後,你需要把數組項回到一起在相同的數據庫

$date = $date[2].'-'.$date[1].'-'.$date[0]; 
0

我會得到的日期戳,並把它作爲一個整數(Integer傳遞順序更容易防止sql注入)。在Postgres的身邊,我會整型轉換回時間戳:

$timestamp = strtotime('15-04-2017'); 

timestamp with time zone 'epoch' + $timestamp * INTERVAL '1 second' 
0

我想通了,從數據庫中提取像它應該

$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)) <= 30 
相關問題