Se você quiser usar
mysqli_stmt::$num_rows (ou seja, verifique o número de linhas na instrução preparada), você precisa usar $stmt->store_result() depois de executar a instrução preparada antes de poder verificar o número de linhas. Isso significa que o resultado é armazenado na memória antes de verificarmos quantas linhas foram retornadas. $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) {
// ...
No entanto, se você quiser usar
mysqli_result::$num_rows (no MySQLi-result que você converte do resultado da instrução), você precisa fazer isso depois de fazer $result = $stmt->get_result(); , e use $result->num_rows; , como mostrado abaixo. $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()) {
// ....
No final, ambos devem acabar fazendo a mesma coisa - forneça um número de linhas retornadas pela consulta preparada original.
Observação
É importante notar que você não pode usar
store_result() e get_result() na mesma declaração. O que significa que no primeiro exemplo, você não pode converter para um objeto mysqli-result (usando get_result() , que permite usar o padrão fetch_assoc() método). Como store_result() armazena o resultado na memória, não há nada para get_result() converter e vice-versa. Isso significa que se você usar
store_result() , você precisa buscar através da instrução-fetch, mysqli_stmt::fetch() e vincule os resultados através de mysqli_stmt::bind_result() . Se você usar get_result() , você deve verificar o número de linhas no objeto resultante do MySQLi-result (como mostrado no segundo exemplo). Você deve, portanto, construir seu código de forma que você só precise usar um deles.
Dito isto, usando
affected_rows como sugerido nos comentários, não é a ferramenta certa para o trabalho - conforme o manual em mysqli_stmt::$affected_rows (a mesma coisa se aplica a uma consulta regular, mysqli::$affected_rows ):- PHP.net em
mysqli_stmt::store_result() - PHP.net em
mysqli_stmt::get_result() - PHP.net em
mysqli_stmt::$num_rows