【问题标题】:Limit sql result on dbal在 dbal 上限制 sql 结果
【发布时间】:2013-06-13 08:56:21
【问题描述】:

我在 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

【问题讨论】:

  • @YourCommonSense 在 Symfony 上使用该解决方案我得到:致命错误:在 /var/www/vhosts/blabla.com/httpdocs/src/Done 中找不到类 'Done\PunctisBundle\Controller\PDO' /PunctisBundle/Controller/AjaxController.php

标签: php sql doctrine dbal


【解决方案1】:
$statement = $connection->prepare(
    'SELECT ... LIMIT :limit'
);
$statement->bindValue('limit', $limit, \PDO::PARAM_INT);
$statement->execute();

$result = $statement->fetchAll();

【讨论】:

【解决方案2】:

或者您可以像这样简单地使用 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));

【讨论】:

  • 这不适用于从学说 2.6.0 开始的限制/偏移和命名参数。我得到无效的 SQL 异常。但是,如果您将 ? 用于参数,它确实有效。
猜你喜欢
  • 2013-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多