2013-02-04 9 views
6

sto cercando di capire l'estensione mysqli e ho fatto google ma ho ottenuto pochissime informazioni su questo tranne php.net che è stato utile.come ottenere il numero totale di righe con mysqli

ora, dopo tutto questo che sto cercando di realizzare ciò che ho potuto con estensione mysql che è la seguente:

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

con mysqli come posso raggiungere questo obiettivo? sono sicuro che mi mancano molte cose. per favore aiutami con un esempio su come raggiungere il mio obiettivo.

risposta

-1

utilizzando mysqli lo fate nel modo seguente (supponendo che l'oggetto mysqli è già stato creato - è anche possibile utilizzare il procedure methods, solo leggermente diverso):

$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

Grazie ajon, funziona bene. posso ottenere i valori delle colonne. ma usando num_rows fornisce il numero corrente di righe che non è quello che intendo raggiungere. stavo cercando di contare il numero totale di righe. per esempio. Ho 35 righe e scelgo di visualizzare 10 query per richieste. come: mostrare 10 su 35 qualcosa del genere. –

6

Si può provare questo:

//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 un ciclo while ho usato la costante MYSQLI_BOTH ma è possibile cambiarla in MYSQLI_NUM o MYSQLI_ASSOC in base alle proprie esigenze.

+1

Grazie per questa risposta. Ho provato questo e $ TotalRcount = $ result2-> fetch_row(); restituisce una matrice con il numero totale effettivo di righe nell'indice 0 – dmeehan

1

SQL_CALC_FOUND_ROWS viene generalmente utilizzato nelle istruzioni SELECT con una clausola LIMIT.

Dal manuale di MySQL (https://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_found-rows):

Un'istruzione SELECT può includere una clausola LIMIT per limitare il numero di righe il server restituisce al cliente. In alcuni casi , è opportuno sapere quante righe l'istruzione avrebbe restituito senza LIMIT, ma senza eseguire nuovamente l'istruzione . Per ottenere questo conteggio delle righe, includere un'opzione SQL_CALC_FOUND_ROWS nell'istruzione SELECT, e poi invocano FOUND_ROWS() dopo

nel tuo esempio sopra, non si utilizza LIMIT per mantenere il numero di risultati verso il basso in modo da utilizzare FOUND_ROWS() significherà solo una chiamata in più al database. Si prega di controllare le altre risposte qui per informazioni su come ottenere il numero di righe restituite. In bocca al lupo.