Gameer
Постоялец
- Регистрация
- 25 Апр 2014
- Сообщения
- 187
- Реакции
- 118
- Автор темы
- #1
Всем доброй ночи кто еще не спит, и утра или дня кто проснулся. Появилась проблема с запросом в Базу данных, точнее использования fetch_array. Но если прописать
то все хорошо. Проблема в том что до этого ошибки не было, использовал код и все было хорошо, а тут вдруг и не могу понять в чем проблема. Хоть и понимаю что за ошибка. В классе базы данных 168 строка.
Создается экземпляр класса :
Сам запрос :
Сам класс Базы данных :
PHP:
mysqli_fetch_array($this->sql_query, MYSQLI_ASSOC);
Создается экземпляр класса :
PHP:
$this->db = BASE_DB::SET_BASE_DB(DBHOST, DBUSER, DBPASS, DBNAME);
Сам запрос :
Код:
$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 == FALSE) self::$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, $pos, strlen($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;
}
}
?>