Примечание: попытка получить свойство необъекта

Я получаю эту ошибку:

(!) Обратите внимание: Попытка получить свойство необъекта в C: \ wamp \ www \ admin \ paginator \ Paginator.class.php в строке 18.

страница указателя:

<?php
require_once 'paginator/Paginator.class.php';

$conn       = new mysqli( 'localhost', 'USER', 'PASS' );
mysqli_select_db($link, "DB");
$limit      = ( isset( $_GET['limit'] ) ) ? $_GET['limit'] : 25;
$page       = ( isset( $_GET['page'] ) ) ? $_GET['page'] : 1;
$links      = ( isset( $_GET['links'] ) ) ? $_GET['links'] : 7;


$query      = "SELECT utilizatori.id, utilizatori.utilizator, utilizatori.nume, utilizatori.rol_user
AS ID, LOGIN, NUME, ROL
FROM utilizatori
ORDER BY `utilizator` ASC";

$Paginator  = new Paginator( $conn, $query );

$results    = $Paginator->getData( $page, $limit );
for( $i = 0; $i < count( $results->data ); $i++ ) : ?>
<tr>
<td><?php echo $results->data[$i]['ID']; ?></td>
<td><?php echo $results->data[$i]['NUME']; ?></td>
<td><?php echo $results->data[$i]['LOGIN']; ?></td>
<td><?php echo $results->data[$i]['ROL']; ?></td>
</tr>
<?php endfor; ?>

paginator.class.php:

<?php

class Paginator {

private $_conn;
private $_limit;
private $_page;
private $_query;
private $_total;


public function __construct( $conn, $query ) {

$this->_conn = $conn;
$this->_query = $query;

$rs= $this->_conn->query( $this->_query );
$this->_total = $rs->num_rows;

Где 18 строка:

$this->_total = $rs->num_rows;

Я проверил все, но не могу понять, в чем проблема. Кто-нибудь может увидеть, где проблема больше, чем я, пожалуйста?

1

Решение

Быстрый ответ: $rs это не объект. И поэтому он не имеет ни свойств, ни методов, и вы не можете рассматривать его как объект, например: $rs->num_rows,

Я предполагаю (так как num_rows является собственностью mysqli_result) что собственность вашего класса $this->_conn это mysqli объект. Если вы посмотрите на документация для mysqli::query(), вы увидите, что этот метод вернет:

  • mysqli_result объект для SELECT, SHOW, DESCRIBE или же EXPLAIN
  • false за неудачу
  • true для других успешных запросов

Короче, $rs это не mysqli_result в вашем примере. Ваш запрос не входит ни в один из перечисленных выше, либо он не выполняется.

Возможно, вы могли бы сделать свой код более надежным с помощью чего-то вроде:

if (false === $rs) {
// uh oh...
throw new RuntimeException(
sprintf('mysqli error! %s', $this->_conn->connect_error)
);
}

Обратите внимание, что не проверено. Надеюсь это поможет 🙂

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]