mysqli_statement::num_rows() возвращает неправильное значение
Вопрос
Я писал класс обработчика базы данных на 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);