在dbal上限制sql结果

时间:2013-06-17 11:56:41

标签: 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 ....)时才出错,这让我觉得我不能在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

2 个答案:

答案 0 :(得分:7)

$statement = $connection->prepare(
    'SELECT ... LIMIT :limit'
);
$statement->bindValue('limit', $limit, \PDO::PARAM_INT);
$statement->execute();

$result = $statement->fetchAll();

答案 1 :(得分:0)

或者你可以简单地在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));