2014-12-28 3 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); 
?> 
Смежные вопросы