Не удается получить 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);