2017-04-15 7 views
0

私は句がPHPでPostgreSQL文のwhere節でユーザ入力日を取得する方法は?

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

であり、これは配達日が現在の日付から月未満の発生した注文を引くためうまく機能するクエリを持っています。しかし、私は常に現在の日付を使用するのではなく、日付のユーザー入力を取る柔軟性が必要です。

ユーザーが日付を入力すると、その後の私のPHPコードが入力を取得し、私は、ユーザーの入力日付に

$user_date 
ようveriableの名前を付けた場合、私は

mm/dd/yyyy 

をそれをエコーし​​ている場合、この形式で返します

その後、私は

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

のためのSQLクエリを必要とするが、私はそのPHをフォーマットする方法を考え出すていませんよクエリが機能するためのユーザー入力日のP変数。基本的には、NOW()ではなく$ user_dateを使用する必要があります。何かアドバイス? FYI、配達日の項目タイプはタイムゾーンのないタイムスタンプです。

答えて

0

ユーザー入力を分解するには、explodeを使用する必要があります。

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

次にあなたが整数を渡す(私は日付のタイムスタンプを取得し、整数としてそれを渡すデータベース

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

と同じであるために戻って一緒に配列項目を配置する必要がありますSQLインジェクションを防ぐのがより簡単になります)。 postgresの側では、私はタイムスタンプに戻ってint型に変換します:

$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 
関連する問題