sql >> Base de Datos >  >> RDS >> Mysql

La declaración preparada de mysqli num_rows devuelve 0 mientras que la consulta devuelve mayor que 0

Cuando ejecuta una declaración a través de mysqli, los resultados no están realmente en PHP hasta que los obtiene; el motor de base de datos conserva los resultados. Entonces el mysqli_stmt El objeto no tiene forma de saber cuántos resultados hay inmediatamente después de la ejecución.

Modifique su código así:

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

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

Ver el manual

Esto no se aplica a su ejemplo particular, pero si su conjunto de resultados es grande, $stmt->store_result() consumirá mucha memoria. En este caso, si lo único que le importa es averiguar si se devolvió al menos un resultado, no almacene los resultados; en su lugar, simplemente verifique si los metadatos del resultado no son nulos:

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

Ver el manual