Php 如何显示我的WHERE条件以正确返回行?
我正在努力找出为什么我的查询返回零行。我曾在一次会议上广泛地试图弄明白这一点,但没有取得令人满意的结果 它的jist是:Php 如何显示我的WHERE条件以正确返回行?,php,pdo,Php,Pdo,我正在努力找出为什么我的查询返回零行。我曾在一次会议上广泛地试图弄明白这一点,但没有取得令人满意的结果 它的jist是: $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");
$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']) );
EDIT:这个查询应该说取日期,将其设置为过去三个月,并将其命名为$mydate。然后从BarTable中获取postdate大于$mydate的所有字段,然后执行查询。
刚才有人向我指出,我所说的是,我选择的行的postdate等于3个月前,也大于$mydate
我不明白我是怎么说的:postdate
不等于3个月前,因此postdate=:postdate
不能选择postdate等于3个月前的行
为了正确显示我的行,我之前键入了WHERE postdate>“$mydate”
如何键入
postdate=:postdate和postdate>“$mydate”
,以便我使用一个参数并确保选择的数据大于$mydate
?如果我理解正确(我完全不确定),您希望使用或而不是和:
$foo_query=$DBH->prepare("SELECT * FROM BarTable WHERE postdate = :postdate OR postdate > '$mydate' ORDER BY postdate DESC");
$foo_query=$DBH->prepare(“从BarTable中选择*,其中postdate=:postdate或postdate>“$mydate”按postdate DESC排序”)代码>
这样,您可以同时获得3个月前发布的帖子和:postdate
上发布的帖子。您需要绑定postdate
的参数。此外,为了满足这两个条件,postdate=:postdate和postdate>$mydate
,您需要在查询中使用或
$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']) );
我推荐“中间人”:
如果您想进行参数绑定,可以尝试这样做,假设您的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();
但是,如果您的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_INT);
$foo_query->execute();
您的postdate
不能等于某个日期,也不能大于某个日期。您的意思是使用还是?您到底想查询什么?最近三个月以上的行,或在$\u REQUEST['postdate']
中指定的日期的行,或两者都有?您想要实现什么?你想要比3个月前晚的帖子吗?或者你想要在:postdate?上发布的帖子吗?又是:postdate=:postdate和postdate>“$mydate”
一个日期怎么可能等于一个日期而大于一个日期?@JvdBerg-他比较的两个日期是分开定义的$mydate
来自strotime,postdate来自$\u REQUEST
。抱歉,我没有包括绑定,但我不确定是否需要包括该区域。我为什么要使用或?我希望标准同时满足这两个条件,而不是一个或另一个?假设$mydate='2012-07-03',和:postdate='2012-08-05'
,当您说postdate=:postdate和postdate>'$mydate'
时,它只会在postdate='2012-08-05'时检查值,由于=
运算符将要搜索的值设置为“2012-08-05”。如果这是您想要的,它将不会提取saypostdate='2012-08-10'
的记录,然后保持查询原样,使用和
,要使用操作符
,您需要在这一行中的日期格式为'Ymd'
$mydate=date(“Ymd”,strotime(-3个月”)代码>以便比较整数。当以这种方式使用或时,此查询是否仍被视为参数化?显然,SQL注入预防很重要,所以通过使用或所有结果都将包含该参数?我感觉是吗?这不起作用,因为查询最终不应该显示早于$mydate中设置的日期的结果,而是显示所有其他结果这可能与我上面提出的问题有关。是否适用于该查询?我想同时满足postdate等于参数:postdate,并且postdate大于$mydate中设置的日期(三个月前)@tomdot:如果您想同时满足这两个条件,即即使请求查询(但太旧),也不要显示查询,而不是您和。如果两者都需要,请选择或。感谢提供有关字段是日期还是时间戳的信息。这将是有益的!
$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();