2012-04-29 12 views
1

このクエリ:payment_date BETWEEN "old date" AND "new date"新しい日付の前に古い日付を書き込むと成功します。クエリpayment_date BETWEEN "new date" AND "old date"の場合、それを動作させる方法は?ユーザーは新しい日付を最初に入力することがありますので、古い日付のみを入力してください。例コード:常にpdoクエリは2つの日付の間のレコードを選択します

$sql = "SELECT customer_name, phone_number, address FROM sale 
     WHERE seller_id=? && $search_by LIKE ? && payment_date BETWEEN ? AND ?"; 
$q = $conn->prepare($sql); 
$result = $q->execute(array($userid, "%".$search_value."%", $oldPaymentDate, $newPaymentDate)); 
+2

をあなたが間違った順序で指定されている場合は、ユーザーの入力を確認してラウンドスワップすることができます。 – shanethehat

+0

素晴らしいアイデア、ありがとう。今すぐ試してみよう。ありがとう。 – zac1987

+2

$ search_byの準備文を使用しないでください –

答えて

2

ユーザー入力を検証すると同時に、ちょうど日付を比較し、それは彼らがそうのように、正しい順序ではありませんスワップを実行します。代替として

$date1 = new DateTime($newPaymentDate); 
$date2 = new DateTime($oldPaymentDate); 

if($date1 < $date2) list($newPaymentDate,$oldPaymentDate)=array($oldPaymentDate,$newPaymentDate); 
+0

私はlist()をまだ学んでいないので、urコードを理解するのに2時間かかりました。最後に私はそれを理解した。どうもありがとう。 – zac1987

+0

はい、2つのDateTimeオブジェクトを作成するだけで、他のものと同様に比較することができます。また、「oldPaymentDate」の日付が「newPaymentDate」より新しい場合は、変数をリスト/配列のthingyに置き換えます。 3番目の変数で行うこともできますが、実際にはそれほど違いはありませんが、リスト/配列を使ってこのようにします。より短い変数を使用すると、とても素敵な1ライナーになります。 – adeneo