Se vuoi usare mysqli_stmt::$num_rows
(ovvero, controlla il numero di righe sull'istruzione preparata), devi usare $stmt->store_result()
dopo aver eseguito l'istruzione preparata prima di poter controllare il numero di righe. Ciò significa che il risultato viene archiviato in memoria prima di controllare quante righe sono state restituite.
$stmt = $conn->prepare($sql);
$stmt->bind_param('ss',$log_username,$log_username);
$stmt->execute();
$stmt->store_result(); // Need to store the result into memory first
if ($stmt->num_rows) {
// ...
Tuttavia, se vuoi usare mysqli_result::$num_rows
(sul risultato MySQLi che converti dal risultato dell'istruzione), devi farlo dopo aver eseguito $result = $stmt->get_result();
e usa $result->num_rows;
, come mostrato di seguito.
$stmt = $conn->prepare($sql);
$stmt->bind_param('ss',$log_username,$log_username);
$stmt->execute();
$result = $stmt->get_result();
if ($result->num_rows) {
while ($row = $result->fetch_assoc()) {
// ....
Alla fine, entrambi dovrebbero finire per fare la stessa cosa:fornire un numero di righe restituite dalla query preparata originale.
Nota
È importante notare che non puoi utilizzare store_result()
e get_result()
sulla stessa affermazione. Ciò significa che nel primo esempio, non puoi convertire in un oggetto mysqli-result (usando get_result()
, che ti consente di utilizzare lo standard fetch_assoc()
metodo). Come store_result()
memorizza il risultato in memoria, non c'è nulla per get_result()
convertire e viceversa.
Ciò significa che se utilizzi store_result()
, devi recuperare tramite l'istruzione-fetch, mysqli_stmt::fetch()
e associa i risultati tramite mysqli_stmt::bind_result()
. Se usi get_result()
, dovresti controllare il numero di righe sull'oggetto MySQLi-result risultante (come mostrato nel secondo esempio).
Dovresti quindi costruire il tuo codice in modo tale che tu debba usarne solo uno.
Detto questo, usando affected_rows
come suggerito nei commenti, non è lo strumento giusto per il lavoro - come da manuale su mysqli_stmt::$affected_rows
(la stessa cosa vale per una query normale, mysqli::$affected_rows
):
- PHP.net su
mysqli_stmt::store_result()
- PHP.net su
mysqli_stmt::get_result()
- PHP.net su
mysqli_stmt::$num_rows