Вызов неопределенной функции mysqli_result :: num_rows ()

Я пытаюсь подсчитать количество строк в результате, и я продолжаю получать приведенную выше ошибку. Я проверил руководство, и я использую mysqli_result :: num_rows (), как и должно быть (я использую объектно-ориентированный стиль.) У меня есть три класса, которые работают здесь.

Класс (соединение):

class utils_MysqlImprovedConnection { protected $_connection; public function __construct($host, $user, $pwd, $db) { $this->_connection = @new mysqli($host, $user, $pwd, $db); if(mysqli_connect_errno ()) { throw new RuntimeException('Cannot access database:' . mysqli_connect_error()); } } public function getResultSet($sql) { $results = new utils_MysqlImprovedResult($sql, $this->_connection); return $results; } public function __destruct() { $this->_connection; } } 

Класс (результат обработки):

 class utils_MysqlImprovedResult implements Iterator, Countable { protected $_key; protected $_current; protected $_valid; protected $_result; public function __construct($sql, $connection) { if (!$this->_result = $connection->query($sql)){ throw new RuntimeException($connection->error . '. The actual query submitted was: '. $sql); } } public function rewind() { if (!is_null($this->_key)){ $this->_result->data_seek(0); } $this->_current = $this->_result->fetch_assoc(); $this->_valid = is_null($this->_current) ? false : true; } public function valid() { return $this->_valid; } public function current() { return $this->_current; } public function key() { return $this->_key; } public function next() { $this->_current = $this->_result->fetch_assoc(); $this->_valid = is_null($this->_current) ? false : true; $this->_key++; } public function count() { $this->_result->store_result(); $this->_result->num_rows(); } } 

Функция класса:

 public function resetPassword($email, $pass){ //check if email exists, update authkey and password, send email $sql = "SELECT * FROM table WHERE column = '$email'"; $results = $this->_db->getResultSet($sql); if($results->count() == 1){ // Process $this->_message = "Success!"; return $this->_message; } else { // Not unique $this->_error = "Try again"; return $this->_error; } } 

Тестовая страница, которую я использую, чтобы вызвать все это (include statement – это просто функция __autoload (), которая работает нормально):

 $columnvar = 'emailaddress@test.com'; $pass = 'blah'; require_once 'inc.init.php'; $user = new utils_User(); try{ $string = $user->resetPassword($email, $pass); echo $string; } catch(Exception $e) { echo $e; } 

Из руководства, похоже, что mysqli_result :: num_rows не является функцией, а скорее переменной, содержащей количество строк.

Его можно использовать следующим образом:

 $num_rows = $mysqli_result->num_rows; 

Эквивалентом функции является mysqli_num_rows($result) , где вы передаете объект mysqli_result , но это то, что вы используете процедурный стиль, а не объектно-ориентированный стиль.

В вашем коде вы должны изменить функцию count() в классе utils_MysqlImprovedResult чтобы быть таким (я предполагаю, что это функция, в которой вы получаете сообщение об ошибке),

 public function count() { // Any other processing you want // ... return $this->_result->num_rows; } 

или, альтернативно, если вы хотите смешивать OO и процедурные стили (возможно, плохую идею),

 public function count() { // Any other processing you want // ... return mysqli_num_rows($this->_result); }