【问题标题】:How can I use FOUND_ROWS() function in PDO?如何在 PDO 中使用 FOUND_ROWS() 函数?
【发布时间】:2018-01-10 19:28:15
【问题描述】:

当我使用mysql_query 时,我已经使用了FOUND_ROWS() 函数,如下所示:

$query = 'SELECT SQL_CALC_FOUND_ROWS * FROM Users';
mysql_query($query);
$query = 'SELECT FOUND_ROWS()';
mysql_query($query);

现在我使用 PDO,这是我的查询:

$sth = $this->dbh->prepare("SELECT SQL_CALC_FOUND_ROWS *,
                                   u.id user_id,
                                   u.avatar,
                                   u.date_time,
                                   CONCAT(u.user_fname, ' ', u.user_lname) name,
                                   sum($this->table_alias.vote_value) vote_value,
                                   sum($this->table_alias.score) score,
                                   $category_in_the_select AS tc $tag_in_the_select AS tt
                            FROM users u
                            JOIN reputations $this->table_alias ON u.id = $this->table_alias.owner_id $query_join
                            WHERE $time_limitation $query_where
                            GROUP BY user_id, u.avatar, u.date_time, name, tc, tt
                            ORDER BY score DESC, vote_value DESC
                            LIMIT :j, $this->per_page");
$this->parameters[":j"] = $j;
$sth->execute($this->parameters);
$users = $sth->fetchAll(PDO::FETCH_ASSOC);

如您所见,我在SELECT 语句中使用了SQL_CALC_FOUND_ROWS,我想知道如何使用FOUND_ROWS()

【问题讨论】:

  • 可能是同一个$this->dbh->exec('SELECT FOUND_ROWS()');
  • @RiggsFolly 老实说,我仍然坚持下去。您提供的链接在我的情况下不起作用。当我将SELECT FOUND_ROWS()$query 变量结合使用时,它会抛出Syntax error or access violation
  • @RiggsFolly 我想在限制之前计算所有匹配行的数量。

标签: php sql pdo mariadb


【解决方案1】:

您需要做的就是在原始执行后运行->query('SELECT FOUND_ROWS()')

$sth = $this->dbh->prepare("SELECT SQL_CALC_FOUND_ROWS *,
                                   u.id user_id,
                                   u.avatar,
                                   u.date_time,
                                   CONCAT(u.user_fname, ' ', u.user_lname) name,
                                   sum($this->table_alias.vote_value) vote_value,
                                   sum($this->table_alias.score) score,
                                   $category_in_the_select AS tc $tag_in_the_select AS tt
                            FROM users u
                            JOIN reputations $this->table_alias ON u.id = $this->table_alias.owner_id $query_join
                            WHERE $time_limitation $query_where
                            GROUP BY user_id, u.avatar, u.date_time, name, tc, tt
                            ORDER BY score DESC, vote_value DESC
                            LIMIT :j, $this->per_page");
$this->parameters[":j"] = $j;
$sth->execute($this->parameters);
$users = $sth->fetchAll(PDO::FETCH_ASSOC);

$count = $this->dbh->query('SELECT FOUND_ROWS()')->fetchColumn();

【讨论】:

  • 谢谢,但是Parse error: syntax error, unexpected '->'
  • 当我删除-> 之一,然后Uncaught PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax;
  • 真的吗?奇怪的!对我来说,它抛出this
  • :-) .. 不好意思问一下,PHEW 是什么意思?
  • :) PHEW = 感谢 heavans,我以为我输了 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-16
  • 1970-01-01
  • 2017-07-11
  • 1970-01-01
  • 1970-01-01
  • 2016-03-09
  • 1970-01-01
相关资源
最近更新 更多