【发布时间】:2014-12-28 07:06:07
【问题描述】:
为什么第二个参数没有传递给查询?
function LikesPastMonth($nMonth, $pid)
{
if($nMonth !== 0) {
$n = $nMonth*-1-1;
} else {
$n = -1;
}
$bdd = new PDO('mysql:host=localhost;dbname=xx', 'xx', 'xx', array(PDO::ATTR_PERSISTENT => true));
$req = $bdd->prepare('SELECT * FROM likes WHERE thedate = DATE_ADD( DATE_ADD( LAST_DAY( CURDATE( ) ) , INTERVAL 1 DAY ) , INTERVAL '.$n.' MONTH ) AND pid = ?');
$req->execute(array($pid));
$result = $req->rowcount();
if(!$result) {
$result = 0;
}
return $result;
}
使用常量而不是 arg 并且不准备查询是可行的。
define('pid','777');
$req = $bdd->query('SELECT * FROM likes WHERE thedate = DATE_ADD( DATE_ADD( LAST_DAY( CURDATE( ) ) , INTERVAL 1 DAY ) , INTERVAL '.$n.' MONTH ) AND pid = "'.pid.'"')->fetchColumn();
将 arg 直接放入查询中不起作用(我尝试过的 2 个示例):
1:
$req = $bdd->query('SELECT * FROM likes WHERE thedate = DATE_ADD( DATE_ADD( LAST_DAY( CURDATE( ) ) , INTERVAL 1 DAY ) , INTERVAL '.$n.' MONTH ) AND pid = "'.$pid.'"')->fetchColumn();
2:
$req = $bdd->query('SELECT * FROM likes WHERE thedate = DATE_ADD( DATE_ADD( LAST_DAY( CURDATE( ) ) , INTERVAL 1 DAY ) , INTERVAL '.$n.' MONTH ) AND pid = '.$pid.'')->fetchColumn();
【问题讨论】:
-
如果在不准备语句的情况下将
$pid参数放入查询中也不起作用,则$pid参数似乎具有空值。如果$pid为空,则抛出异常,看看你是否发现任何错误。 (另外,如果您只想获取记录数,请使用SELECT COUNT(*)而不是实际选择所有记录。)