无法让Doctrine DBAL将值绑定为int

时间:2013-12-04 00:46:37

标签: doctrine silex

我有一个使用DoctrineServiceProvider的silex应用程序,我有一个查询:

$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 个答案:

答案 0 :(得分:3)

LIMIT是MySQL无法处理预处理语句参数 [citation needed] 的少数几个地方之一。

取决于您从哪里获得

  • 确保您正确验证用户输入
  • 确保您正在生成一个整数

然后使用字符串连接来创建查询,或使用sprintf创建更优雅的方式:

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