2
为什么第二个参数未传递给查询?PHP函数不会将参数传递给PDO查询
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(*)'而不是实际选择所有记录。) – DCoder