mysqli_statement :: num_rows () возвращает неправильное значение - PullRequest
0 голосов
/ 17 сентября 2008

Я писал класс обработчика базы данных на PHP с использованием класса mysqli и подготовленных операторов. Я пытался распечатать результат. Это не сработало сразу, поэтому я решил сделать некоторую отладку. Я попытался использовать метод num_rows() из класса mysqli_statement, но он продолжал возвращать 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

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

Ответы [ 3 ]

5 голосов
/ 17 сентября 2008

Интересно, сообщает ли 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; 
}

Имеет ли это какой-либо эффект?

1 голос
/ 09 марта 2009

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

0 голосов
/ 17 сентября 2008

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

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

$statement->execute();

$statement->store_result();

printf("Number of rows: %d.\n", $statement->num_rows);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...