Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

instrução preparada mysqli num_rows retorna 0 enquanto a consulta retorna maior que 0


Quando você executa uma instrução através do mysqli, os resultados não estão realmente em PHP até que você os busque -- os resultados são mantidos pelo mecanismo de banco de dados. Então o mysqli_stmt objeto não tem como saber quantos resultados existem imediatamente após a execução.

Modifique seu código assim:
$stmt->execute();
$stmt->store_result(); // pull results into PHP memory

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

Consulte o manual

Isso não se aplica ao seu exemplo específico, mas se o conjunto de resultados for grande, $stmt->store_result() consumirá muita memória. Nesse caso, se tudo o que importa é descobrir se pelo menos um resultado foi retornado, não armazene resultados; em vez disso, apenas verifique se os metadados do resultado não são nulos:
$stmt->execute();
$hasResult = $stmt->result_metadata ? true : false;

Consulte o manual