extDB3 часть 2. Соединение с базой данных. Отправка запросов.

Теперь разберемся, как подключить миссию к базе данных, а также, как отправлять запросы.

Для соединения с базой данных используются системные команды, начинающиеся на цифру 9, название базы данных и протокол, которым является любое целочисленное значение.

protocol = ceil random 9999;
db_name = "arma_db";

Здесь мы создали две переменных. Одна из которых содержит название базы данных, к которой мы хотим подключиться, а вторая протокол соединения, который определяется рандомным образом при каждом старте миссии.

Теперь мы подключимся к базе данных:

_result = "Extdb3" callExtension format["9:ADD_DATABASE:%1",db_name];
if (!(_result isEqualTo "[1]")) then {
  diag_log "extDB3: Ошибка соединения с базой данных";
};
format["9:ADD_DATABASE:%1",db_name]; //Это системная команда, начинающаяся на цифру 9, которая вернет нам один из двух вариантов:

[1] — если соединение установлено,

[0,»error»] — если возникла ошибка.

Поэтому мы делаем проверку результата и, если результат не равен [1], выводим в лог ошибку.

Теперь нам необходимо выбрать тип протокола для работы с базой данных. Их есть два варианта, это SQL и SQL_CUSTOM. Второй необходим для того, чтобы отправлять заготовленные заранее запросы из файла sql_custom.ini .
А первый — для отправки любых запросов, написанных в скрипте.

_result = "Extdb3" callExtension format["9:ADD_DATABASE_PROTOCOL:%1:SQL:%2:TEXT",db_name,protocol];
if (!(_result isEqualTo "[1]")) then {
  diag_log "extDB3: Ошибка соединения с базой данных";
};

После этого ради безопасности мы можем заблокировать возможность оправки системных команд:

"extDB3" callExtension "9:LOCK"; //разблокировать не возможно
//либо
"extDB3" callExtension "9:LOCK:qwerty"; //возможно разблокировать с помощью пароля (qwerty)

Для разблокирования используется команда:

"extDB3" callExtension "9:UNLOCK:qwerty"; //где qwerty - пароль

Все!

Соединение с базой данных установлено, теперь мы можем отправлять запросы, которые могут создавать, удалять и изменять таблицы, поля, строки и данные в них.

Представим, что у нас есть таблица PLAYERINFO, содержащая в себе 3 поля (name, uid, score) и хранит информацию по игрокам.

Чтобы записать в эту таблицу новую информацию мы должны отправить такую SQL команду:

"extDB3" callExtension format["0:SQL:INSERT INTO PLAYERINFO (name,uid,score) VALUES (%1,%2,%3)",name player, getPlayerUID player, score player];

Для того чтобы получить данные из базы:

_result = "extDB3" callExtension "0:SQL:SELECT * FROM PLAYERINFO";

Если вам нужно получить только имя и очки игрока, но не всех, а одного:

_result = "extDB3" callExtension format["0:SQL:SELECT name,score FROM PLAYERINFO WHERE uid='%1'",getPlayerUID player];

Если в игре очки игрока изменились и вам необходимо обновить их в базе, то используем такую команду:

"extDB3" callExtension format["0:SQL:UPDATE PLAYERINFO SET score=%1 WHERE uid='%2'",score player, getPlayerUID player];

А для удаления строки с информацией по конкретному игроку из базы данных:

"extDB3" callExtension format["0:SQL:DELETE FROM PLAYERINFO WHERE uid='%1'",getPlayerUID player];

Это краткая, но емкая информация по работе с базой данных.
С помощью вышеописанных команд вы можете реализовать 90% своих желаний, а остальные 10% настолько нетривиальны, что требуют вдумчивого изучения в каждом конкретном случае.

Остались вопросы — заходи в наш Discord канал