Почему мой запрос с именованными параметрами возвращает пустой результат?

Я конвертирую свой код MySQL в PDO, чтобы воспользоваться подготовленными операторами. Первоначально я получал фатальную ошибку, как описано в этом вопросе . Я решил эту проблему, но при попытке добавить параметры возникли проблемы.

Код, который я пытаюсь получить, – это:

include ("foo/bar.php"); try { $DBH = new PDO("mysql:host=$hostname;dbname=$database", $username, $password); } catch(PDOException $e) { echo $e->getMessage(); } $mydate=date("Ymd",strtotime("-3 months")); $foo_query=$DBH->prepare("SELECT id, postdate, title, SUBSTRING_INDEX(body,' ',20) as preview_text, body FROM BarTable WHERE postdate = :postdate AND postdate > '$mydate' ORDER BY postdate DESC"); $foo_query->execute( array('postdate' => $_REQUEST['postdate']) ); $DBH=null; 

На английском языке это предназначено для чтения « взять текущую дату и установить ее обратно 3 месяца, называя ее $ mydate, затем выберите все эти поля (также беря первые 20 слов тела и называя его« preview_text ») из моей таблицы где postdate равен параметру postdate и где postdate больше $ mydate ".

Затем я показываю результаты в следующем (обратите внимание, что это теперь сокращено):

 $foo_query->setFetchMode(PDO::FETCH_ASSOC); while($r=$foo_query->fetch()) { echo $r["id"]; echo $r["title"]; echo date("dMY",strtotime($r["postdate"])); echo nl2br ($r["preview_text"]); } 

Теперь, когда запрос SELECT написан как:

 ("SELECT id, postdate, title, SUBSTRING_INDEX(body,' ',20) as preview_text, body FROM BarTable WHERE postdate > '$mydate' ORDER BY postdate DESC") 

… он отображает именно то, что мне нужно, но, конечно, пока он подготовлен, он не содержит параметров, поэтому достигается только 50% цели.

У меня сложилось впечатление, что способ подготовить заявление, которое я изложил изначально, было бы прекрасно в соответствии с учебными пособиями и советами, которые я уже дал.

Я попытался напечатать свою ошибку и не вызывает ошибок. Я вручную отправил запрос следующим образом и не получил никаких возвратов. Примечание. Я пробовал строки даты во всех возможных перестановках:

 ("SELECT id, postdate, title, SUBSTRING_INDEX(body,' ',20) as preview_text, body FROM BarTable WHERE postdate = 20121001 AND postdate > 20120701 ORDER BY postdate DESC") 

EDIT: указанное выше было указано как неправильное, но я сохраню его здесь для справки, поскольку этот раздел объясняется в комментариях ниже.

EDIT: ручная отправка запроса теперь отображается правильно при вводе:

 ("SELECT id, postdate, title, SUBSTRING_INDEX(body,' ',20) as preview_text, body FROM BarTable WHERE postdate = '2012-09-30 08:38:23' ORDER BY postdate DESC") 

Запрос не отображается вообще при вводе любого из следующего:

 ("SELECT id, postdate, title, SUBSTRING_INDEX(body,' ',20) as preview_text, body FROM BarTable WHERE postdate = :postdate ORDER BY postdate DESC") ("SELECT id, postdate, title, SUBSTRING_INDEX(body,' ',20) as preview_text, body FROM BarTable WHERE postdate = :postdate AND postdate > '$mydate' ORDER BY postdate DESC") ("SELECT id, postdate, title, SUBSTRING_INDEX(body,' ',20) as preview_text, body FROM BarTable WHERE postdate = '2012-09-30 08:38:23' AND postdate > '2012-07-01 00:01' ORDER BY postdate DESC") 

Я думаю, что я должен каким-то образом связать параметр, но в учебниках, которые я прочитал, конкретно не говорится, что я должен их всегда связывать – я не уверен, как действовать.

EDIT: Я искал привязку заявления следующим образом без успеха. Запрос, по-видимому, игнорирует привязку, поэтому состояние запроса действует как все перечисленные выше перестановки без привязки:

 $foo_query->bindParam ( ":postdate", strtotime ( $_REQUEST['postdate']), PDO::PARAM_INT); $foo_query->execute(); 

Что я делаю неправильно, чего не происходит, когда я не добавляю параметры? Должен ли я объявлять параметр postdate где-то иначе, чем в запросе SELECT?

В целях предотвращения внедрения SQL я хотел бы использовать именованные параметры, а также подготовить инструкцию, но если я не могу понять это, мне просто не нужно будет использовать именованные параметры.

Solutions Collecting From Web of "Почему мой запрос с именованными параметрами возвращает пустой результат?"