Php 限制dbal上的sql结果

Php 限制dbal上的sql结果,php,sql,doctrine,dbal,Php,Sql,Doctrine,Dbal,我正在使用Symfony2上的dbal从我的表中检索一些信息: $social = $conn->fetchAll('SELECT * FROM page WHERE brand_id = :brand LIMIT :start,:limit', array('brand'=>$brand, 'start'=>(int) $start, 'limit'=>(int) $limit)); 我只有在添加最后一部分(LIMIT…)时才会出错,这让我觉得我无法将结果限制在sq

我正在使用Symfony2上的dbal从我的表中检索一些信息:

$social = $conn->fetchAll('SELECT * FROM page WHERE  brand_id = :brand LIMIT :start,:limit', array('brand'=>$brand, 'start'=>(int) $start, 'limit'=>(int) $limit));
我只有在添加最后一部分(LIMIT…)时才会出错,这让我觉得我无法将结果限制在sql查询内部,而是使用某种命令将结果限制在外部。我怎样才能解决这个问题

错误:

An exception occurred while executing 'SELECT * FROM page WHERE brand_id = :brand LIMIT :start,:limit' with params {"brand":1,"start":0,"limit":4}:

SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''0','4'' at line 1

或者您可以简单地在fetchAll($sql,array$params=array(),$types=array())中使用第三个参数,如下所示:

$social = $conn->fetchAll('SELECT * FROM page WHERE  brand_id = :brand LIMIT :start,:limit', array('brand'=>$brand, 'start'=>(int) $start, 'limit'=>(int) $limit), array(\PDO::PARAM_STR, \PDO::PARAM_INT, \PDO::PARAM_INT));

@在Symfony上使用该解决方案的常识:致命错误:在/var/www/vhosts/blabla.com/httpdocs/src/Done/PunctisBundle/Controller/AjaxController.phpIs中找不到类'Done\PunctisBundle\Controller\PDO'?另外,我使用的是OCI8和Oracle,所以需要对其进行一些修改。试图将其直接粘贴到SQL字符串中,但效果不太好。但是,如果有偏离主题的风险,请只回答问题中的SQL注入部分。是的,预处理语句(PDO)不受SQL注入的影响,因为它们是通过值绑定转义的-SQL本身已经预编译。从2.6.0开始,这不适用于限制/偏移和命名参数。我得到无效的SQL异常。但是,如果您使用?作为参数,它确实有效。
$social = $conn->fetchAll('SELECT * FROM page WHERE  brand_id = :brand LIMIT :start,:limit', array('brand'=>$brand, 'start'=>(int) $start, 'limit'=>(int) $limit), array(\PDO::PARAM_STR, \PDO::PARAM_INT, \PDO::PARAM_INT));