【问题标题】:how to get the total row count with mysqli如何使用 mysqli 获取总行数
【发布时间】:2013-02-04 07:52:57
【问题描述】:

我正在尝试了解 mysqli 扩展并进行了谷歌搜索,但除了 php.net 之外得到的信息很少,这很有帮助。

毕竟,我正在尝试使用 mysql 扩展来实现我所能达到的效果,如下所示:

// MYSQL STYLE OF fetching array, query limit and perform total row count all at once

$sql = "SELECT SQL_CALC_FOUND_ROWS *, post.id as pid, bla bla FROM account ORDER BY pid ASC". $eb["array"]['querylimit'];

$result = mysql_query($sql, $eb["con"]);
$TotalRcount = mysql_fetch_row(mysql_query("SELECT FOUND_ROWS()"));

// Performing record count [current]
// $RecordCount = mysql_num_rows($result);

while($row = mysql_fetch_array($result)){
    // read columns
}

使用 mysqli 我怎样才能做到这一点?我确定我错过了很多东西。请帮助我举例说明如何实现我的目标。

【问题讨论】:

    标签: mysql count row


    【解决方案1】:

    你可以试试这个:

    //Establish connection using mysqli api
    $conn = mysqli_connect('hostname', 'username', 'password', 'database_name');
    
    $sql = "SELECT SQL_CALC_FOUND_ROWS *, post.id as pid, bla bla FROM account ORDER BY pid ASC". $eb["array"]['querylimit'];
    
    $sql2 = "SELECT FOUND_ROWS()";
    
    $result1 = $conn->query($sql);
    $result2 = $conn->query($sql2);
    $TotalRcount = $result2->fetch_row();
    
    // Performing record count [current]
    // $RecordCount = $result->num_rows();
    
    while($row = $result->fetch_array(MYSQLI_BOTH)){
        // read columns
    }
    

    在 while 循环中,我使用了 MYSQLI_BOTH 常量,但您可以根据需要将其更改为 MYSQLI_NUM 或 MYSQLI_ASSOC。

    【讨论】:

    • 感谢您的回答。我试过这个 $TotalRcount = $result2->fetch_row();返回索引为 0 的实际总行数的数组
    【解决方案2】:

    SQL_CALC_FOUND_ROWS 通常用在带有 LIMIT 子句的 SELECT 语句中。

    来自 MySQL 手册 (https://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_found-rows):

    一个 SELECT 语句可以包含一个 LIMIT 子句来限制 服务器返回给客户端的行数。在一些 情况下,最好知道语句有多少行 会在没有限制的情况下返回,但没有运行 再次声明。要获得此行数,请包括 SELECT 语句中的 SQL_CALC_FOUND_ROWS 选项,然后 之后调用 FOUND_ROWS()

    在上面的示例中,您没有使用 LIMIT 来减少结果数量,因此使用 FOUND_ROWS() 只会意味着对数据库的额外回调。请在此处查看其他答案,以获取有关如何获取返回的行数的信息。祝你好运。

    【讨论】:

      【解决方案3】:

      使用 mysqli 你可以按照以下方式进行(假设 mysqli 对象已经创建——你也可以使用 procedure methods, 只是略有不同):

      $sql = "SELECT SQL_CALC_FOUND_ROWS *, post.id as pid, bla bla 
              FROM account ORDER BY pid ASC". $eb["array"]['querylimit'];
      $result = $mysqli->query($sql);
      $TotalRcount = $result->num_rows;
      while($row=$result->fetch_assoc()){
          $col1 = $row['col1'];  // col1 is a placeholder for whatever column you are reading
          //read columns
      }
      

      【讨论】:

      • 谢谢 ajon,它工作正常。我可以获取列值。但是使用 num_rows 给出了当前的行数,这不是我想要实现的。我试图计算总行数。例如我有 35 行并选择查看每个请求的 10 个查询。喜欢:显示 35 个中的 10 个。
      猜你喜欢
      • 2013-12-06
      • 1970-01-01
      • 2011-03-27
      • 2012-02-12
      • 1970-01-01
      • 1970-01-01
      • 2015-08-26
      • 2013-09-12
      • 2020-03-11
      相关资源
      最近更新 更多