6

我正在尝试了解 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 我怎么能做到这一点?我确定我错过了很多东西。请帮助我举例说明如何实现我的目标。

4

3 回答 3

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。

于 2013-02-04T12:05:40.710 回答
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 的情况下该语句将返回多少行,但无需再次运行该语句。要获取此行数,请在 SELECT 语句中包含 SQL_CALC_FOUND_ROWS 选项,然后调用 FOUND_ROWS()

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

于 2015-05-26T16:13:56.653 回答
0

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

$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
}
于 2013-02-04T07:54:35.640 回答