PHP вызов функции-члена prepare () при необъектной ошибке - PullRequest
0 голосов
/ 30 сентября 2011

Привет, мне нужна помощь с этой ошибкой, которую я продолжаю получать.Он отлично работает везде в скрипте, кроме случаев, когда я пытаюсь вызвать его внутри этой функции.

Функция, которую я вызываю: getTotalServers

Ошибка:

Fatal error: Call to a member function prepare() on a non-object in C:\xampp2\htdocs\runeloft\ss_sources\util.php on line 208

Вызов этой функции:

function display_table($online, $where, $num_servers = null){
global $aaaa, $bbbb;
 $num_per_page = 30;

 $page = 1;

 // how many records per page
 $size = 10;

 // we get the current page from $_GET
 if (isset($_GET['page'])){
     $page = (int) $_GET['page'];
 }

 $aaaa = getTotalServers(1, $num_servers);;
 $bbbb = $page;

 // create the pagination class
 $pagination = new Pagination();
 $pagination->setLink("?action=status&page=%s");
 $pagination->setPage($page);
 $pagination->setSize($size);
 $pagination->setTotalRecords($num_servers);

 global $g_headers;
 $g_headers = array(
           'name' => 'Server Name',
           'ip' => 'IP',
           'port' => 'Port',
           'uptime' => 'Uptime',
           'online' => 'Status',
           );

 $start = isset($_GET['start']) ? $_GET['start'] : 0;

 mysql_con();
 global $g_mysqli;
 $start = $g_mysqli->real_escape_string($start);
 if(isset($_GET['sort']) && isset($g_headers[$_GET['sort']])){
      $order_by = 'ORDER BY `'.$g_mysqli->real_escape_string($_GET['sort']).'` '.(isset($_GET['desc']) ? 'DESC' : 'ASC');
 }else{
      //default sort
      $order_by = 'ORDER BY `uptime` DESC, `time` ASC';
 }

 //$order_by .= " LIMIT $start, $num_per_page";
 $order_by .= " " . $pagination->getLimitSql();

 if($start == 0 && $online == 1 && !isset($_GET['sort']))
      echoTable('Spons', "`sponsored` != '0'", "ORDER BY `sponsored` DESC, RAND() LIMIT 10");



 echoTable('Other', $where, $order_by, $online, $start, $num_per_page, $num_servers);
 close_mysql();
}

Вызываемая функция:

function getTotalServers($online, $where, $num_servers = null){
$where = "`online` = '$online' AND `sponsored` = '0'";
 if($num_servers == null){
      global $g_mysqli;
      $stmt = $g_mysqli->prepare("SELECT COUNT(*) FROM `servers` WHERE ".$where) or debug($g_mysqli->error);
      $stmt->execute();
      // bind result variables
      $stmt->bind_result($num_servers);
      $stmt->fetch();
      $stmt->close();
 }
    return $num_servers;

}

Спасибо за любую помощь.

Ответы [ 3 ]

0 голосов
/ 07 августа 2012

Объект $g_mysqli должен быть инициализирован ДО он вызывается в вашем коде.

В вашем случае вы создаете глобальную переменную $g_mysqli во многих местах, но каждый раз, когда она инициализируется, это объект NULL.

Таким образом, вы не можете вызывать никакие функции внутри нулевого объекта.

0 голосов
/ 07 апреля 2013

Проблема с функцией header ().Все, что вам нужно сделать, это добавить ob_start () вверху ваших кодов на любой странице, которая использует функцию header ().

Просто сбивающая с толку ошибка !!!Если кто-то знает причину, пожалуйста, объясните ..

0 голосов
/ 30 сентября 2011

Я предполагаю, что поскольку mysql_con не был вызван в этот момент, переменная $ g_mysql не существует.

Если вы попытаетесь вызвать метод для необъекта, PHP вызовет ошибку, которую вывидят.По сути, поскольку переменная не существует, по умолчанию она равна нулю.

$a = null;
$a->prepare()

Не имеет смысла, поэтому PHP выдает эту ошибку.

С другой стороны, вы действительно не должныне использовать глобальные переменные.Вы можете зайти в Google или выполнить поиск по стеку для получения более подробного списка, но, вкратце, они нарушают переносимость кода и делают ошибки, подобные этой, труднее обнаружить.Больно передавать дополнительный параметр каждому вызову функции, который в этом нуждается, но это намного лучше с точки зрения проектирования (и на самом деле не так много дополнительных усилий: p).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...