如何呈现我的WHERE条件以正确返回行?

时间:2012-10-03 19:44:56

标签: php pdo

我正在努力找出为什么我的查询返回零行。我已经在this question进行了广泛的尝试,结果不是很好。

它的主旨是:

    $mydate=date("Y-m-d",strtotime("-3 months"));

    $foo_query=$DBH->prepare("SELECT * FROM BarTable WHERE postdate = :postdate AND postdate > '$mydate' ORDER BY postdate DESC");
    $foo_query->execute( array('postdate' => $_REQUEST['postdate']) );

编辑:这个查询应该说取日期,将其设置为过去三个月,并将其命名为$ mydate。然后从BarTable WHERE获取postdate大于$ mydate的所有字段,然后执行查询。

我刚才已经向我指出,我所说的是我选择的帖子中的帖子等于3个月前且大于$mydate

我不明白我是怎么说的。 :postdate不等于3个月前,因此postdate = :postdate无法选择postdate等于3个月前的行。

要正确显示我的行,我之前正在输入WHERE postdate > '$mydate'

如何键入postdate = :postdate AND postdate > '$mydate'以便我使用参数并确保根据大于$mydate来选择数据?

4 个答案:

答案 0 :(得分:1)

如果我理解正确(我完全不确定),您需要OR而不是AND

$foo_query=$DBH->prepare("SELECT * FROM BarTable WHERE postdate = :postdate OR postdate > '$mydate' ORDER BY postdate DESC");

通过这种方式,您可以获得3个月前的帖子以及:postdate上发布的帖子。

答案 1 :(得分:1)

您需要绑定postdate的参数。另外,为了让两个评论都满意,postdate = :postdate and postdate > $mydate,您需要在查询中使用OR

$mydate=date("Y-m-d",strtotime("-3 months"));
$foo_query=$DBH->prepare("SELECT * FROM BarTable WHERE postdate = :postdate OR postdate > '$mydate' ORDER BY postdate DESC");
$foo->bindParam(':postdate', $_REQUEST['postdate'], PDO::PARAM_STR);
$foo_query->execute();

或者与您在问题中提到的内容类似,在分配:时错过了:postdate

 $mydate=date("Y-m-d",strtotime("-3 months"));
 $foo_query=$DBH->prepare("SELECT * FROM BarTable WHERE postdate = :postdate OR postdate   '$mydate' ORDER BY postdate DESC");
 $foo_query->execute( array(':postdate' => $_REQUEST['postdate']) );

答案 2 :(得分:1)

如果你想进行参数绑定,你可以试试这个,假设你的postdate是日期字段

$foo_query=$DBH->prepare("
   SELECT * FROM BarTable 
   WHERE postdate = :postdate AND postdate > '$mydate' ORDER BY postdate DESC");
$foo_query->bindParam(':postdate', $_REQUEST['postdate'], PDO::PARAM_STR);
$foo_query->execute(); 

但是,如果您的过期日期为时间戳,则应如下所示:

$foo_query=$DBH->prepare("
   SELECT * FROM BarTable 
   WHERE postdate = :postdate AND postdate > '$mydate' ORDER BY postdate DESC");
$foo_query->bindParam(':postdate', $_REQUEST['postdate'], PDO::PARAM_INT);
$foo_query->execute(); 

答案 3 :(得分:0)

我推荐“BETWEEN”:

$foo_query=$DBH->prepare(
  "SELECT * FROM BarTable 
  WHERE postdate between ':somedate' AND '$mydate' 
  ORDER BY postdate DESC");