Doctrine Can';t让DBAL将值绑定为int

Doctrine Can';t让DBAL将值绑定为int,doctrine,silex,Doctrine,Silex,我有一个silex应用程序,它使用DoctrineServiceProvider,其中我有一个查询,如: $app['db']->fetchAll('SELECT * FROM foo WHERE bar= ? LIMIT ?', array('baz',$limit)); 其中limit来自查询字符串-$limit=$request->get('limit')。它抛出了一个PDOException,因为它似乎将$limit视为一个字符串,并试图执行limit'10'而不是limit 1

我有一个silex应用程序,它使用DoctrineServiceProvider,其中我有一个查询,如:

$app['db']->fetchAll('SELECT * FROM foo WHERE bar= ? LIMIT ?', array('baz',$limit));
其中limit来自查询字符串-
$limit=$request->get('limit')
。它抛出了一个
PDOException
,因为它似乎将$limit视为一个字符串,并试图执行
limit'10'
而不是
limit 10

我已尝试将
数组(\PDO::PARAM_STR,\PDO::PARAM_INT)
添加到
fetchAll
的调用中,但似乎没有帮助

我也试着用$app['db']->prepare、$app['db']->bindValue等做了很长一段时间,但也没有成功


这是我应该能做的吗?我做错了什么?

LIMIT
是MySQL无法处理准备好的语句参数[需要引用]的少数地方之一

取决于你从哪里得到的

  • 确保正确验证用户输入
  • 确保生成的是整数
然后使用字符串连接创建查询,或者使用
sprintf
,以更优雅的方式创建查询:

sprintf("SELECT * FROM tablename LIMIT %d", $limit);

IIRC限制是为数不多的不能使用参数的地方之一。这看起来很遗憾。如果这是真的,我想很高兴知道改变的不是我。您认为最好的替代方案是什么?我手动验证限制,然后使用
sprintf
%d
创建查询。如果您这样回答,我可以接受。