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