2013-05-24 20 views
9

Sto imparando le istruzioni preparate e sto provando a lavorare con una query che produce più righe di risultati. In questo momento, sto solo cercando di capire come determinare il numero di righe e quindi rendere quel numero visualizzato nell'html.Istruzioni preparate - Numero di righe

mia dichiarazione preparata assomiglia a questo:

if($stmt = $mysqli -> prepare("SELECT field1, field2, field3 FROM table WHERE id= ?ORDER BY id ASC")) 
    { 
    /* Bind parameters, s - string, b - blob, i - int, etc */ 
    $stmt -> bind_param("i", $id); 
    $stmt -> execute(); 

    /* Bind results */ 
    $stmt -> bind_result($testfield1, $testfield2, $testfield3); 

    /* Fetch the value */ 
    $stmt -> fetch(); 

    /* Close statement */ 
    $stmt -> close(); 
    } 

Capisco che dovrei salvare prima i risultati, quindi utilizzare num_rows, in questo modo:

$stmt->store_result(); 
$stmt->num_rows; 

Tuttavia, sono in esecuzione e problema con la pagina bugging quando ho messo quel codice in là. Non sono nemmeno riuscito ad arrivare al prossimo passo su come visualizzare il numero di righe

Quindi, la domanda è: cosa mi manca in termini di calcolo del numero di righe all'interno dell'istruzione preparata, quindi come lo visualizzerei con un <?php echo '# rows: '.$WHATGOESHERE;?>

Grazie !!

risposta

12

num_rows restituisce il numero, è necessario memorizzarlo in una variabile.

/*.....other code...*/ 
$numberofrows = $stmt->num_rows; 
/*.....other code...*/ 

echo '# rows: '.$numberofrows; 

codice in modo completo dovrebbe essere qualcosa di simile:

if($stmt = $mysqli -> prepare("SELECT field1, field2, field3 FROM table WHERE id= ? ORDER BY id ASC")) 
    { 
    /* Bind parameters, s - string, b - blob, i - int, etc */ 
    $stmt -> bind_param("i", $id); 
    $stmt -> execute(); 

    /* Bind results */ 
    $stmt -> bind_result($testfield1, $testfield2, $testfield3); 

    /* Fetch the value */ 
    $stmt -> fetch(); 
    $numberofrows = $stmt->num_rows; 

    /* Close statement */ 
    $stmt -> close(); 
    } 
echo '# rows: '.$numberofrows; 
+0

dove va a finire nella dichiarazione preparata che ho postato? Dopo eseguire()? Dopo bind_result, o fetch? Importa? – Kevin

+0

@Kevin Non ci credo. Assicurati solo che vada dopo l'esecuzione e dovrebbe andare bene –

+0

Oh e dal modo in cui hai dimenticato uno spazio tra '?' E 'ORDER BY'. Aggiornerò la mia risposta per risolvere il problema con –

-2

Partenza l'esempio # 2 qui: PHP.net

Usa DOP :: query() a rilasciare una dichiarazione SELECT COUNT (*) con gli stessi predicati come la vostra istruzione SELECT previsto, quindi utilizzare PDOStatement: : fetchColumn() per recuperare il numero di righe che verranno restituite. L'applicazione può quindi eseguire l'azione corretta.

Problemi correlati