我正在努力找出为什么我的查询返回零行。我已经在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
来选择数据?
答案 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");