2013-02-04 63 views
6

我想了解mysqli擴展和谷歌,但得到了很少的信息,除了php.net這是有幫助的。如何獲得總行數與mysqli

現在這一切後我試圖實現這正是我可以用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的我怎樣才能做到這一點?我確定我錯過了很多東西。請幫助我舉例說明如何實現我的目標。

回答

-1

使用的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 
} 
+1

謝謝阿讓,它的工作很好。我可以得到列值。但是使用num_rows給出了當前的行數,這不是我想要實現的。我試圖計算總行數。例如我有35行,並選擇查看每個請求10個查詢。例如:顯示35個10這樣的事情。 –

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

感謝您的回答。我試過這個和$ TotalRcount = $ result2-> fetch_row();返回索引爲0的實際總行數的數組 – dmeehan

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()只會意味着額外的回調數據庫。有關如何獲取返回行數的信息,請查看其他答案。祝你好運。