Mysql
 sql >> Database >  >> RDS >> Mysql

L'istruzione mysqli preparata num_rows restituisce 0 mentre la query restituisce maggiore di 0

Quando esegui un'istruzione tramite mysqli, i risultati non sono effettivamente in PHP finché non li recuperi:i risultati sono conservati dal motore DB. Quindi il mysqli_stmt l'oggetto non ha modo di sapere quanti risultati ci sono subito dopo l'esecuzione.

Modifica il tuo codice in questo modo:

$stmt->execute();
$stmt->store_result(); // pull results into PHP memory

// now you can check $stmt->num_rows;

Vedi il manuale

Questo non si applica al tuo esempio particolare, ma se il tuo set di risultati è grande, $stmt->store_result() consumerà molta memoria. In questo caso, se tutto ciò che ti interessa è capire se è stato restituito almeno un risultato, non archiviare i risultati; invece, controlla semplicemente se i metadati del risultato non sono null:

$stmt->execute();
$hasResult = $stmt->result_metadata ? true : false;

Vedi il manuale