Описание процесса подготовки таблиц в базе данных, создания схемы данных для автоматических миграций и функций для работы с данными.
Подготовка таблиц и схемы данных
Хаки автоматически поддерживают свои таблицы в базе данных в актуальном состоянии. Описание таблиц находится в файле schema.php
в папке с хаком. Вам не потребуется создавать её вручную, используйте встроенный инструментарий:
- Подключитесь к базе данных своей сети через phpMyAdmin или MySQL WorkBench.
- Обязательно деактивируйте хак, если он активен!
- Создайте требуемые таблицы с нужными индексами. Используйте движок Aria.
- Обязательно следуйте принципам именования таблиц из следующего раздела.
- Перейдите в раздел "Генератор схемы данных" по кнопке "Файлы"
- Проверьте список таблиц и создайте новую схему. Она сохранится в хаке автоматически.
- Активируйте хак после обновления файла схемы данных.
Важно! Работа над таблицами хака должна вестись только на отключенном хаке! Любые изменения могут быть стёрты в соответствии со схемой данных в момент проверки системы или установки обновлений!
Принципы именования таблиц
Таблицы, создаваемые и используемые для хаков, должны начинаться с названия хака с префиксом x в начале. Полное название таблицы будет выглядеть как cpa_xhack_table
, где вместо hack
будет название хака, а table
- имя самой таблицы. Названия таблиц всегда указываются маленькими латинскими буквами. Например, таблица со списком адресов из хака proxy
будет называться cpa_xproxy_addr
.
Названия таблиц рекомендуется задавать в файле start.php
вашего хака в специальных константах с префиксом DB_
. Например, таблица cpa_xproxy_addr
может быть описана константой DB_XPROXY_ADDR
или DB_XPROXY_ADDR_ADDR
. Само имя таблицы указывается с SQL_PREF
в начале.
define( 'DB_XPROXY_ADDR', SQL_PREF . 'xproxy_addr' );
Функции работы с базой данных
Работа с базой осуществляется через объект $core->db
. Все данные для работы функций должны быть предварительно подготовлены и очищены. Данные, поступающие в $core->get
и $core->post
, уже подготовлены для работы. Данные из API-функций или созданные внутри приложения рекомендуется предварительно обработать функцией addslashes()
.
$core->db->query( $sql )
Выполняет текстовый запрос из $sql
и возвращает true
в случае успеха или false
в случае неудачи.
$core->db->query( "UPDATE ".DB_XPROXY_ADDR." SET proxy_fail = 1 WHERE proxy_id = '$id'" );
$core->db->row( $sql )
Извлекает из базы строку по запросу $sql
в виде ассоциативного массива.
$core->db->row( "SELECT * FROM ".DB_XPROXY_ADDR." WHERE proxy_id = '$id' LIMIT 1" );
$core->db->field( $sql )
Извлекает из базы одно поле по запросу $sql
. Удобно для выборки количества элементов.
$core->db->data( "SELECT COUNT(*) FROM ".DB_XPROXY_ADDR." WHERE proxy_status = 1" );
$core->db->data( $sql )
Извлекает из базы массив строк по запросу $sql
в виде ассоциативного массива. Рекомендуется при работе с небольшими наборами данных до сотни элементов.
$core->db->data( "SELECT proxy_id, proxy_status, proxy_ip, proxy_port FROM ".DB_XPROXY_ADDR." WHERE proxy_check = 1" );
$core->db->col( $sql )
Извлекает из базы столбец по запросу $sql
в виде плоского массива.
$core->db->col( "SELECT proxy_id FROM ".DB_XPROXY_ADDR." WHERE proxy_check = 0" );
$core->db->icol( $sql )
Извлекает из базы ассоциативный массив ключ-значение из первого и второго элементов выборки по запросу $sql
. Удобно для извлечения списка названий элементов.
$core->db->icol( "SELECT proxy_id, proxy_name FROM ".DB_XPROXY_ADDR." WHERE proxy_status = 1" );
$core->db->it( $sql )
Извлекает массив строк из базы через итератор. Аналог $core->db->data()
для больших объемов данных. Рекомендуется для работы со статистикой.
$data = $core->db->it( "SELECT * FROM ".DB_XPROXY_ADDR ); foreach ( $data as $d ) …
$core->db->ic( $sql )
Извлекает колонку из базы данных через итератор. Аналог $core->db->col()
для больших объёмов данных.
$data = $core->db->ic( "SELECT proxy_token FROM ".DB_XPROXY_ADDR ); foreach ( $data as $d ) …
$core->db->ii( $sql )
Извлекает ассоциативный массив ключ-значение из базы через итератор. Аналог $core->db->icol()
для больших объёмов данных.
$data = $core->db->ii( "SELECT proxy_id, proxy_name FROM ".DB_XPROXY_ADDR ); foreach ( $data as $id => $v ) …
$core->db->add( $table, $data )
Добавляет элемент из массива $data
в таблицу с названием $table
. Возвращает true
в случае успеха и false
в случае проблемы. Важно! Данные в массиве должны быть предварительно "защищены" вручную.
$core->db->add( DB_XPROXY_ADDR, [ 'proxy_name' => 'Meow', 'proxy_ip' => '127.0.0.1' ] );
$core->db->lastid()
Возвращает идентификатор последнего добавленного в базу элемента.
$core->db->replace( $table, $data )
Аналог $core->db->add
, но работающий с командой REPLACE
.
$core->db->addupd( $table, $data )
Аналог $core->db->add
, который обновляет данные при наличии записи с таким же ключом. Замена $core->db->replace
, которая не меняет идентификатор элемента при запросе.
$core->db->edit( $table, $data, $where )
Изменяет данные $data
в таблице с названием $table
с условием $where
. Возвращает true
в случае успеха и false
в случае проблемы. Условие $where
может быть передано как строкой, так и массивом ключ-значение. Значения массива складываются через AND. Важно! Данные в массиве должны быть предварительно "защищены" вручную.
$core->db->edit( DB_XPROXY_ADDR, [ 'proxy_status' => 1], "proxy_id = '$id'" ] ); $core->db->edit( DB_XPROXY_ADDR, [ 'proxy_status' => 1 ], [ 'proxy_id' => $id ] );
$core->db->del( $table, $where )
Удаляет данные в таблице с названием $table
по условию $where
. Возвращает true
в случае успеха и false
в случае проблемы. Условие $where
работает так же, как в функции edit
.
$core->db->del( DB_XPROXY_ADDR, [ 'proxy_id' => $id ] );
$core->db->get( $table, $where )
Возвращает одну строку из таблицы $table
по условию $where
в виде ассоциативного массива. Обёртка над функцией $core->db->row()
. Условие $where
работает так же, как в функции edit
.
$core->db->get( DB_XPROXY_ADDR, [ 'proxy_id' => $id ] );
$core->db->all( $table, $where )
Возвращает все строки из таблицы $table
по условию $where
в виде ассоциативного массива. Обёртка над функцией $core->db->data()
. Условие $where
работает так же, как в функции edit
.
$core->db->all( DB_XPROXY_ADDR, [ 'proxy_status' => 1 ] );