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.xml 中。请参见下面的示例。

你也需要改变

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 回答