PHP MySQLi num_rows всегда возвращает 0 - PullRequest
5 голосов
/ 30 июня 2011

Я создал класс, который использует возможности встроенного в PHP класса MySQLi, и он предназначен для упрощения взаимодействия с базой данных.Однако, используя подход ООП, я испытываю трудности с переменной экземпляра num_rows, возвращающей правильное количество строк после выполнения запроса.Посмотрите на снимок моего класса ...

class Database {
//Connect to the database, all goes well ...

//Run a basic query on the database
  public function query($query) {
  //Run a query on the database an make sure is executed successfully
    try {
    //$this->connection->query uses MySQLi's built-in query method, not this one
      if ($result = $this->connection->query($query, MYSQLI_USE_RESULT)) {
        return $result;
      } else {
        $error = debug_backtrace();

        throw new Exception(/* A long error message is thrown here */);
      }
    } catch (Exception $e) {
      $this->connection->close();

      die($e->getMessage());
    }
  }

//More methods, nothing of interest ...
}

Вот пример использования:

$db = new Database();
$result = $db->query("SELECT * FROM `pages`"); //Contains at least one entry
echo $result->num_rows; //Returns "0"
exit;

Почему это не так?Другие значения из результирующего объекта являются точными, например, «field_count».Любая помощь с благодарностью.

Спасибо за ваше время.

Ответы [ 3 ]

5 голосов
/ 30 июня 2011

Возможная ошибка: http://www.php.net/manual/en/mysqli-result.num-rows.php#104630

Код взят из исходного кода (Йохан Абильдсков):

$sql = "valid select statement that yields results"; 
if($result = mysqli-connection->query($sql, MYSQLI_USE_RESULT)) 
{ 
          echo $result->num_rows; //zero 
          while($row = $result->fetch_row()) 
        { 
          echo $result->num_rows; //incrementing by one each time 
        } 
          echo $result->num_rows; // Finally the total count 
}

Может также проверяться в процедурном стиле:

/* determine number of rows result set */
$row_cnt = mysqli_num_rows($result);
1 голос
/ 06 декабря 2018

У меня была та же проблема, и я обнаружил, что решение было поставить:

$result->store_result();

.. после выполнения запроса $ и до

echo $ result-> num_rows;

1 голос
/ 23 ноября 2012

Это может быть нормальным поведением, если вы отключите буферизацию строк результата с помощью MYSQLI_USE_RESULT

Отключение буфера означает, что вы можете выбирать, сохранять и COUNT строки. Вы должны использовать флаг по умолчанию

$this->connection->query($query, MYSQLI_STORE_RESULT); 

Эквивалент

$this->connection->query($query)
...