0

誰かが私の以下の質問を手伝ってくれますか? 「Food Specials」ニュースレター (ニュースレター名が異なるため、フォーム変数を介して渡す必要があります) を購読し、値が「1」で、サインアップ日の間に該当するすべてのユーザーを選択する必要があります。次の形式で選択されました。

$sql = 'SELECT * FROM users WHERE :newsletter = 1 AND signed_up < ":start" AND signed_up < ":end"';
$result->bindValue(":newsletter", "food_specials", PDO::PARAM_STR);
$result->bindValue(":start", "2012-09-01 12:00:00", PDO::PARAM_STR);
$result->bindValue(":end", "2012-09-25 12:00:00", PDO::PARAM_STR);
4

2 に答える 2

1

最初の「food_specials」は1に等しくなることはありません。おそらくここか何かに値1を含む変数をバインドする必要があります。それが何のためにあるのかわからない。この回答の残りの部分でfood_specialは、pdoで設定しようとしている列名を想定します。これはできません。あなたがする必要があるのは、それを明示的にSQLに入れることです。以下の例を参照してください。

また、変更する必要があります

signed_up < ":start" 

signed_up > :start

つまり、必要なのは

$sql = "SELECT * 
          FROM users 
         WHERE food_special = 1 
           AND signed_up > :start 
           AND signed_up < :end";

signed_up > :start AND signed_up < :endあなたが実際に意味しているのであればsigned_up >= :start AND signed_up <= :end、別の解決策について@glavićの答えを探す必要があります。

于 2012-09-26T21:12:40.727 に答える
0

BETWEENを使用してください:

SELECT * 
FROM users 
WHERE 
    :newsletter = 1 AND 
    signed_up BETWEEN :start AND :end
于 2012-09-26T21:14:53.283 に答える