2013-02-04 17 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.

Problemi correlati