Теперь разберемся, как подключить миссию к базе данных, а также, как отправлять запросы.
Для соединения с базой данных используются системные команды, начинающиеся на цифру 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 канал