Я запускаю следующий код:
$conn = new PDO(....); .... pdo attributes ... $limitvalue = 0; $limit = 10; $sql = $conn->prepare("SELECT * FROM table1 LIMIT ?, ?"); $sql->bindParam(1, $limitvalue, PDO::PARAM_INT); $sql->bindParam(2, $limit, PDO::PARAM_INT); $sql->execute();
И я получаю:
Исключить исключение «PDOException» с сообщением «SQLSTATE [42000]: Ошибка синтаксиса или нарушение доступа: 1064 У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с 'NULL, 10' в строке 1 '
Это происходит только с этим конкретным запросом. Все остальное в порядке.
Кстати: я знаю, что может показаться глупым, что я подготовил заявления для значений «in-code». Но это всего лишь пример. Фактически значения зависят от номера страницы, но здесь это неважно – этот запрос также дает ту же ошибку.
Если кому-то интересно, версия PHP: 5.3.4RC2 и MySQL: mysqlnd 5.0.7-dev – 091210 – $ Редакция: 304625 $
Кажется, это ошибка php : PDO игнорирует константу PARAM_INT и использует переменные $limit
и $limitvalue
как строку. Которые цитируются в запросе при привязке.
Попробуйте использовать:
$sql->bindParam(1, (int)$limitvalue, PDO::PARAM_INT); $sql->bindParam(2, (int)$limit, PDO::PARAM_INT);
Чтобы заставить тип переменных int.
Я не думаю, что первый параметр предела в sql может быть NULL. Если вам просто нужны первые 10 записей, используйте LIMIT 10.