2014-12-28 57 views
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(); 
+0

如果把'$ pid'参数到查询不无准备语句甚至工作,似乎'$ pid'说法有一个空值。如果'$ pid'为空,则抛出一个异常,看看你是否以这种方式发现任何错误。 (另外,如果你只想获得记录数,可以使用'SELECT COUNT(*)'而不是实际选择所有记录。) – DCoder

回答

0

从您的示例中定义它可能无法正常工作,因为您将777封装在引号中。

你叫你的方法是这样的:

<?php 
LikesPastMonth(3, 1); 
?>