Настройка PDO / MySQL LIMIT с помощью именных заполнителей

У меня возникла проблема, LIMIT частью LIMIT SQL-запроса. Это связано с тем, что запрос передается как строка. Я видел здесь еще одну Q, которая касается параметров привязки, ничего, что связано с Named Placeholders в массиве.

Вот мой код:

 public function getLatestWork($numberOfSlides, $type = 0) { $params = array(); $params["numberOfSlides"] = (int) trim($numberOfSlides); $params["type"] = $type; $STH = $this->_db->prepare("SELECT slideID FROM slides WHERE visible = 'true' AND type = :type ORDER BY order LIMIT :numberOfSlides;"); $STH->execute($params); $result = $STH->fetchAll(PDO::FETCH_COLUMN); return $result; } 

Ошибка, которую я получаю: Syntax error or access violation near ''20'' (20 – значение $numberOfSlides ).

Как я могу это исправить?

Solutions Collecting From Web of "Настройка PDO / MySQL LIMIT с помощью именных заполнителей"

Проблема заключается в том, что execute() quotes the numbers и рассматривает как строки:

Из руководства – массив значений с таким количеством элементов, как и связанные параметры в выполняемом операторе SQL. Все значения рассматриваются как PDO :: PARAM_STR.

 <?php public function getLatestWork($numberOfSlides=10, $type=0) { $numberOfSlides = intval(trim($numberOfSlides)); $STH = $this->_db->prepare("SELECT slideID FROM slides WHERE visible = 'true' AND type = :type ORDER BY order LIMIT :numberOfSlides;"); $STH->bindParam(':numberOfSlides', $numberOfSlides, PDO::PARAM_INT); $STH->bindParam(':type', $type, PDO::PARAM_INT); $STH->execute(); $result = $STH->fetchAll(PDO::FETCH_COLUMN); return $result; } ?> 

Я бы предложил привязать параметры и форсировать их тип:

 $STH->bindParam(':numberOfSlides', $numberOfSlides, PDO::PARAM_INT); $STH->execute();