Проблема с on a non-object

Тема в разделе "PHP", создана пользователем Gameer, 9 окт 2015.

Статус темы:
Закрыта.
Модераторы: latteo
  1. Gameer

    Gameer Постоялец

    Регистр.:
    25 апр 2014
    Сообщения:
    120
    Симпатии:
    77
    Всем доброй ночи кто еще не спит, и утра или дня кто проснулся. Появилась проблема с запросом в Базу данных, точнее использования fetch_array. Но если прописать
    PHP:
    mysqli_fetch_array($this->sql_queryMYSQLI_ASSOC);
    то все хорошо. Проблема в том что до этого ошибки не было, использовал код и все было хорошо, а тут вдруг и не могу понять в чем проблема. Хоть и понимаю что за ошибка. В классе базы данных 168 строка.

    Создается экземпляр класса :
    PHP:
    $this->db BASE_DB::SET_BASE_DB(DBHOSTDBUSERDBPASSDBNAME);
    Сам запрос :
    Код:
    $sql = $this->db->RETURN_ARRAY("SELECT
                          st.id AS comm_id, st.name_static, st.user_id AS comm_user_id, st.date AS comm_date, st.author,
                           st.email AS comm_email, st.text, st.ip, st.is_register, st.rating, st.vote_num,
                           u.name, u.email AS user_email, u.news_num, u.comm_num, u.user_group, u.lastdate, u.reg_date,
                           u.signature, u.foto, u.fullname, u.land, u.xfields
                         FROM
                            static_comm AS st, " . PREFIX . "_users AS u
                         WHERE
                             st.user_id=u.user_id AND name_static={?}
                         ORDER BY {?}
                         DESC LIMIT {?},{?}",
                         array($this->id_static, 'id', $this->cstartlimit, $this->searchcount),
                         MYSQLI_ASSOC
                      );
    Сам класс Базы данных :
    PHP:
    <?php
    /*
    =============================================================================
    Kawaii SM 2016 (c)
    =============================================================================
    Автор : Gameer
    -----------------------------------------------------
    URL: http://igameer.ru/
    =============================================================================
    Файл:  base.php
    =============================================================================
    Версия файла : .1 Stable Release
    =============================================================================
    /*
    * Назначение:
    * - Соединение с базой данных.
    */

    CLASS BASE_DB
    {

        private static 
    $db FALSE;    // Экземпляр класса
        
    private $mysqli_base;         // Наша база
        
    private $rep_symb "{?}";     // Символ для парсинга
        
    private $sql_query FALSE;    // Идентификатор результата запроса
      
        /*
        * Получение экземпляра класса.
        * Если экземпляр уже существует то возвращается в противном случае создаётся.
        */
        
    STATIC FUNCTION SET_BASE_DB($host$user$pass$db_name)
        {
            if (
    self::$db == FALSEself::$db = NEW BASE_DB($host$user$pass$db_name);
            return 
    self::$db;
        }

        
    /*
        * Конструктор который устанавливает связь с Базой Данных и задает Кодировку.
        *
        */
        
    PRIVATE FUNCTION __construct($host$user$pass$db_name)
        {
            
    $host EXPLODE(":"$host);
            if (isset(
    $host[1]))
                
    $this->mysqli_base = @new mysqli($host[0], $user$pass$db_name$host[1]);
            else
                
    $this->mysqli_base = @new mysqli($host[0], $user$pass$db_name);
          
            if (
    $this->mysqli_base->connect_error) {
                die( 
    'Ошибка подключения! Код : ' $this->mysqli_base->connect_errno '. Причина : ' $this->mysqli_base->connect_error);
            }
          
            
    $this->mysqli_base->query("SET NAMES 'utf8'");
        }

        
    /*
        * Функция REPLACE_PARAM которая заменит символ на значение которое проходит через real_escape_string.
        *
        * @param $query     - запрос
        * @param $params     - параметры (не обязательно)
        * @return Запрос
        */
        
    FUNCTION REPLACE_PARAM($query$params)
        {
            if (
    $params) {
                for (
    $i 0$i count($params); $i++)
                {
                    
    $pos strpos($query$this->rep_symb);
                    
    $arg "'".$this->mysqli_base->real_escape_string($params[$i])."'";
                    
    $query substr_replace($query$arg$posstrlen($this->rep_symb));
                }
            }
            return 
    $query;
        }

        
    /*
        * Функция для SELECT которая вернет таблицу результатов.
        *
        * @param $query     - запрос
        * @param $params     - параметры (не обязательно)
        * @return Данные OR FALSE
        */
        
    FUNCTION SELECT($query$params FALSE)
        {
            
    $this->sql_query $this->mysqli_base->query($this->REPLACE_PARAM($query$params));
            if (!
    $this->sql_query) return FALSE;
            
    $rows = array();
            while ((
    $row $this->sql_query->fetch_assoc()) != FALSE)
            {
              
    $rows[] = $row;
            }
          
            
    $this->FREE();
            return 
    $rows;
        }

        
    /*
        * Функция для SELECT которая вернет только одну строку.
        *
        * @param $query     - запрос
        * @param $params     - параметры (не обязательно)
        * @return Данные OR FALSE
        */
        
    FUNCTION SELECT_ONE($query$params FALSE)
        {
            
    $this->sql_query $this->mysqli_base->query($this->REPLACE_PARAM($query$params));
            
    $sql_res = ($this->sql_query->num_rows != 1) ? FALSE $this->sql_query->fetch_assoc();
            
    $this->FREE();
            return (
    $sql_res === FALSE) ? FALSE $sql_res;
        }

        
    /*
        * Функция для запросов кроме SELECT. В случае запроса INSERT вернет последний AUTO_INCREMENT
        *
        * @param $query     - запрос
        * @param $params     - параметры (не обязательно)
        * @return LAST INSERT ID OR TRUE/FALSE
        */
        
    FUNCTION QUERY($query$params FALSE)
        {
            
    $this->sql_query $this->mysqli_base->query($this->REPLACE_PARAM($query$params));
            if (
    $this->sql_query)     return ($this->mysqli_base->insert_id 0) ? $this->mysqli_base->insert_id true;
            else                     return 
    FALSE;
        }
      
        
    /*
        * Функция для экранизации специальных символов в строке для использования в SQL выражении.
        *
        * @param $query     - строка
        * @return Данные
        */
        
    FUNCTION SAFE($query FALSE)
        {
            if(
    $this->mysqli_base AND $query)
            {
                if(
    is_array($query))
                {    for(
    $i 0$i count($query); $i++)
                    {
                        
    $query[$i] = $this->mysqli_base->real_escape_string($query[$i]);
                    }
                    return 
    $query;
                }
                else
                    return 
    $this->mysqli_base->real_escape_string($query);
            }
        }
      
        
    /*
        * Функция для получения числа строк, затронутых предыдущей операцией MySQL.
        *
        * @return Число строк
        */
        
    FUNCTION RET_AFF_ROWS()
        {
            if(
    $this->mysqli_base) return $this->mysqli_base->affected_rows;
        }
      
        
    /*
        * Функция RETURN_ARRAY помещает строку в массив
        *
        * @param $query     - запрос
        * @param $params     - параметры (не обязательно)
        * @param $sql_tipe     - Значение константы
        */
        
    FUNCTION RETURN_ARRAY ($query$params FALSE$sql_tipe MYSQLI_ASSOC)
        {
            
    $this->sql_query $this->mysqli_base->query($this->REPLACE_PARAM($this->SAFE($query), $this->SAFE($params)));
            
    $sql_res $this->sql_query->fetch_array(MYSQLI_ASSOC);
            return 
    $sql_res;
        }
      
        
    /*
        * Функция NUM_ROWS возвращает количество строк
        *
        * @return Количество строк
        */
        
    FUNCTION NUM_ROWS ($sql_quer FALSE)
        {
            if(!
    $sql_quer$sql_quer $this->sql_query;
            return 
    $sql_quer->num_rows;
        }
      
        
    /*
        * Функция FREE освобождает память занятую результатами запроса
        *
        * @param $sql_quer     - Идентификатор результата запроса
        */
        
    FUNCTION FREE($sql_quer FALSE)
        {
            if(!
    $sql_quer$sql_quer $this->sql_query;
            
    $sql_quer->free_result;
        }
      
        
    /*
        * Функция CLOSE для закрытия соединения с базой
        */
        
    FUNCTION CLOSE()
        {
            @
    $this->mysqli_base->close();
            
    $this->db FALSE;
        }
    }
    ?>
     
  2. Gameer

    Gameer Постоялец

    Регистр.:
    25 апр 2014
    Сообщения:
    120
    Симпатии:
    77
    Проблема решена. Все дело было в том что не нужно мне было использовать REPLACE_PARAM функцию на параметры что идут в ORDER и LIMIT.
     
Статус темы:
Закрыта.