我有一个使用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等,但这也没有飞过。
这是我应该做的吗?我做错了什么?
答案 0 :(得分:3)
LIMIT
是MySQL无法处理预处理语句参数 [citation needed] 的少数几个地方之一。
取决于您从哪里获得
然后使用字符串连接来创建查询,或使用sprintf
创建更优雅的方式:
sprintf("SELECT * FROM tablename LIMIT %d", $limit);