2013-02-04 11 views
6

Ich versuche zu verstehen mysqli Erweiterung und hat google, aber habe sehr wenige Informationen zu diesem außer php.net, was hilfreich war.Wie bekomme ich die Gesamtzahl der Zeilen mit mysqli

jetzt nach all dem ich versuche, was ich konnte mit MySQL-Erweiterung zu erreichen, die wie folgt lautet:

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

mit mysqli Wie kann ich das erreichen? Ich bin sicher, dass ich viele Dinge vermisse. Bitte hilf mir mit einem Beispiel, wie ich mein Ziel erreichen kann.

Antwort

-1

mit mysqli Sie tun es die folgende Art und Weise (vorausgesetzt, die mysqli-Objekt bereits erstellt wird - Sie können auch die procedure methods, nur etwas anders verwenden):

$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

Dank ajon, es funktioniert gut. Ich kann die Spaltenwerte erhalten. aber die Verwendung von num_rows gibt die aktuelle Anzahl von Zeilen an, was nicht das ist, was ich erreichen möchte. Ich habe versucht, die Gesamtzahl der Zeilen zu zählen. z.B. Ich habe 35 Zeilen und wähle 10 Abfragen pro Anfragen. wie: 10 von 35 so etwas zeigen. –

6

Sie können versuchen, diese:

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

In einer while-Schleife habe ich die Konstante MYSQLI_BOTH verwendet, aber Sie können sie in MYSQLI_NUM oder MYSQLI_ASSOC ändern, je nachdem, was Sie brauchen.

+1

Danke für diese Antwort. Ich habe es versucht und $ TotalRcount = $ result2-> fetch_row(); gibt ein Array mit der tatsächlichen Gesamtzahl der Zeilen in Index 0 zurück – dmeehan

1

SQL_CALC_FOUND_ROWS wird normalerweise in SELECT-Anweisungen mit einer LIMIT-Klausel verwendet.

Aus dem MySQL-Handbuch (https://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_found-rows):

Ein SELECT-Anweisung kann eine LIMIT-Klausel enthält die Anzahl der Zeilen vom Server zurück an den Client zu beschränken. In einigen Fällen ist es wünschenswert zu wissen, wie viele Zeilen die Anweisung ohne die LIMIT zurückgegeben hätte, aber ohne die Anweisung erneut auszuführen. Um diese Zeilenanzahl zu erhalten, umfasst eine SQL_CALC_FOUND_ROWS Option in der SELECT-Anweisung, und dann rufen FOUND_ROWS() danach

In Ihrem Beispiel oben, die Sie nicht LIMIT verwenden, um die Anzahl der Ergebnisse zu halten, so verwenden FOUND_ROWS() wird nur einen zusätzlichen Rückruf an die Datenbank bedeuten. Weitere Informationen dazu, wie Sie die Anzahl der zurückgegebenen Zeilen erhalten, finden Sie in den anderen Antworten. Viel Glück.

Verwandte Themen