mysqli_statement::num_rows() возвращает неправильное значение

StackOverflow https://stackoverflow.com/questions/80292

  •  09-06-2019
  •  | 
  •  

Вопрос

Я писал класс обработчика базы данных на PHP, используя класс mysqli и подготовленные операторы.Я пытался распечатать результат.С самого начала это не сработало, поэтому я решил немного отладить.Я пытался использовать num_rows() метод из mysqli_statement class, но он продолжал возвращать 0.Я решил написать небольшую часть тестового кода, чтобы упростить его и увидеть, что происходит не так.Затем я смог вернуть нужные мне данные, но num_rows() метод по-прежнему возвращает 0, даже когда он фактически выбирает и извлекает некоторые данные.Вот код:

$mysqli = new mysqli('localhost', 'username', 'password', 'database');
if(mysqli_connect_errno())
{
  die('connection failed');
}

$statement = $mysqli->stmt_init();

$query = "SELECT name FROM table WHERE id = '2000'";
if($statement->prepare($query))
{
    $statement->execute();
    $statement->bind_result($name);
    $statement->fetch();
    $statement->store_result();
    echo $statement->num_rows();
    echo $name; 
}
else
{
    echo 'prepare statement failed';
    exit();
}

Итак, да, ожидаемый результат:

1name

И фактический результат:

0name

Может ли кто-нибудь сказать мне, почему это так?

Это было полезно?

Решение

Интересно, сообщает ли num_rows() относительно текущего набора результатов.Попробуйте захватить num_rows() перед получением данных.например

if($statement->prepare($query))
{
    $statement->execute();
    $statement->store_result();
    echo $statement->num_rows();
    $statement->bind_result($name);
    $statement->fetch();
    echo $name; 
}

Это имеет какой-то эффект?

Другие советы

num_rows — это не метод, это свойство.

Не похоже, что вы объявили $name.

Также попробуйте удалить функцииbind_result() и fetch(), чтобы они выглядели примерно так:

$statement->execute();

$statement->store_result();

printf("Number of rows: %d.\n", $statement->num_rows);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top