У меня возникла проблема, 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
).
Как я могу это исправить?
Проблема заключается в том, что 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();