如何使用mysqli获取总行数

时间:2013-02-04 07:52:57

标签: mysql count row

我正在尝试了解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我怎样才能实现这一目标?我相信我错过了很多东西。请帮我举例说明如何实现我的目标。

3 个答案:

答案 0 :(得分:6)

你可以试试这个:

//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。

答案 1 :(得分:1)

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

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

  

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

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

答案 2 :(得分:-1)

使用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
}