База данных

Класс с функциями для работы с базой данных – DB – определен в файле includes/database.php.

Все функции имеют access: public, что означает, что вызывать их в diafan.CMS можно откуда угодно, из любого файла и модуля. Вызываются функции в формате: DB::имя_функции()

Например, чтобы сделать запрос к таблице diafan_people, и выудить оттуда все поля с сотрудниками из одного отдела, нужно сделать так:
$rows = DB::query_result("SELECT fio FROM diafan_people WHERE otdel=%d"$otdel);
Указывая таблицу, можно не писать префикс diafan_people, а написать {people}.
$rows = DB::query_result("SELECT fio FROM {people} WHERE otdel=%d"$otdel);

Обратите внимание, в примере мы не пишем WHERE otdel=$otdel, а пишем WHERE otdel=%d. Это сделано для безопасности, чтобы можно было спокойно делать запросы с внешними переменными типа $_GET["otdel"].

Для фильтрации аргументов SQL-запроса, вместо данных передаются маски, а данные передаются в качестве дополнительных аргументов для функций DB::query(), DB::query_result() и DB::query_range() в порядке, в котором они следуют в SQL-запросе. Существуют следующие маски:

  • %d – число,
  • %s – строка,
  • %h – строка без HTML кода,
  • %% - символ %,
  • %f – число с плавающей точкой,
  • %b – файлы

Название таблицы пишется без профикса в фигурных скобках.

Пример: {attachments}

Переводимые переменные в SQL-запросе пишутся в квадратных скобках.

Пример: [name]

Для проверки, правильно ли сформировался SQL-запрос, или для отладки, запрос можно вывести на экран. Для этого нужно перед запросом написать "DEV " и включить режим разработки.

Пример:
$this->result["text"] = DB::query_result("DEV SELECT [text] FROM {shop_category} WHERE id=%d", $this->diafan->cat);

Функции для работы с БД

resource connect(string $url) – пробует подключится к базе данных.
  • string $url: доступ к базе данных
Пример:
DB::connect("mysql://user_sql:pass@localhost/diafan_base");
Подключаемся, например, к другой БД на хостинге.

array fetch_array($result) – извлекает результирующий ряд как массив.
  • $result
Пример:
$result DB::query("SELECT name FROM {site} ORDER BY name ASC");
while (
$row DB::fetch_array($result))
{
    echo 
$row["name"];
}

Выводим все имена из базы.

object fetch_object($result) – извлекает результирующий ряд как объект.
  • $result

integer next_id (string $table) – получает номер id для таблицы $table.
  • string $table: название таблицы без префикса
Пример:
$id DB::next_id("rewrite");
Присваиваем переменной значение ID, который добавится в таблицу rewrite следующим.

integer num_rows($result) – получает количество рядов в результате.
  • $result
Пример:
$result DB::query("SELECT id FROM {people} WHERE age>30"); 
echo 
DB::num_rows($result);

Выводим количество человек, чей возраст более 30 лет.

resource query($query) – отправляет запрос к базе данных.
  • $query
Пример:
DB::query("INSERT INTO {firm} (name, inn, text) VALUES ('%s', '%d', '%s')"
$_POST["name"], $_POST["inn"], $_POST["opisanie"]);

Вставляем в таблицу firm данные.

resource query_range($query) – отправляет запрос к базе данных с лимитом на количество получаемых в результате рядов.
  • $query
Пример:
$result_img DB::query_range("SELECT name, id FROM {image} WHERE trash=0");
Получаем имена картинок из БД.

mixed query_result($query) – получает результирующие данные из SQL-запроса.
  • $query
Пример:
$text DB::query_result("SELECT [text] FROM {shop_category} WHERE id=%d"$this->diafan->cat);
Получаем описание текущей категории из БД.

mixed result($result, [ $row = 0]) – получает результирующие данные.
  • $result
  • $row

mixed title(string $table, integer $id, string $param_name) – возвращает значение поля $param_name для таблицы $table и строки с номером $id.
  • string $table: название таблицы без префикса
  • integer $id: идентификатор строки
  • string $param_name: название поля
Пример:
echo DB::title("users"3"fio");
Выводим ФИО пользователя с id=3 из таблицы users.

mixed where(string $table, string $where, string $param_name) – возвращает значение поля $param_name для таблицы $table и одной строки, соответствующей запросу $where.
  • string $table: название таблицы без префикса
  • string $where: SQL-условие
  • string $param_name: название поля
Пример:
DB::where("people""parent_id=3 AND act=1""sort");
Выводим поля name из таблицы people с условием что они активны и родительская категория = 3.


Не понятно? Уточните