Не удается получить DBAL Doctrine для привязки значения как целого

У меня есть приложение Silex, которое использует DoctrineServiceProvider, где у меня есть запрос как:

$app['db']->fetchAll('SELECT * FROM foo WHERE bar= ? LIMIT ?', array('baz',$limit));

Где предел приходит из строки запроса - $limit = $request->get('limit'), Это бросает PDOException как кажется, обрабатывает $limit как строку и пытается сделать LIMIT '10' и не LIMIT 10

Я пробовал добавлять array(\PDO::PARAM_STR,\PDO::PARAM_INT) на призыв к fetchAll но, похоже, не помогает.

Я также пытался проделать долгий путь с $app['db']->prepare, $app['db']->bindValue и т. Д., Но это тоже не получилось.

Это то, что я должен быть в состоянии сделать? Что я делаю неправильно?

1 ответ

Решение

LIMIT это одно из немногих мест, где MySQL не может обрабатывать подготовленные параметры оператора[цитата нужна].

В зависимости от того, где вы получаете это либо

  • убедитесь, что вы правильно проверяете ввод пользователя
  • убедитесь, что вы генерируете целое число

а затем использовать конкатенацию строк для создания запроса, или немного более элегантным способом, с sprintf:

sprintf("SELECT * FROM tablename LIMIT %d", $limit);
Другие вопросы по тегам