Dupont, extDB не знает команд армы, она только с SQL работает.

Как работает extDB2

Лучший Ответ dos622 , 21 December 2015 - 21:37
ну как работает, создаеться уникальное соединение:
DBConId = str(round(random(999999))); _result = call compile ("extDB2" callExtension format["9:ADD_DATABASE_PROTOCOL:nanmedatabase:SQL_CUSTOM_V2:%1:nanmedatabase", DBConId]);
(у автора мода есть стандартный пример)
а потом
DBConId закидываются данный в базу или читаются
MY_EXT_LoadWr ={ private["_data","_query","_result"]; _data = _this; _query = format["%1:%2:%3",0,DBConId,_data]; _result = call compile ("extDB2" callExtension _query); (_result select 1) select 0 };
типо такого:
_playerData = format["loadPlayer:%1", _playerUID] call MY_EXT_LoadWr;
а в самом конфиге extDB2, формируеться обычны SQL запрос
[loadPlayer] SQL1_1 = SELECT Worldspace, Inventory, Uniform, Vest, Backpack, Datestamp, Experience FROM character WHERE PlayerUID = ? Number of Inputs = 1 SQL1_INPUTS = 1 OUTPUT = 1,2,3,4,5,6-STRING,7-STRIN

#41
OFFLINE
Отправлено 26 December 2015 - 13:46
#43
OFFLINE
Отправлено 26 December 2015 - 14:03
#44
OFFLINE
Отправлено 26 December 2015 - 14:09
можно любые команды и запросы поддерживаемые СУБД помещать.
совершенно верно.
С SQL та все понятно, просто я уточнял у вас про команды СУБДешки самой, поддерживаемые в extDB2
Сообщение отредактировал Dupont: 26 December 2015 - 14:10
#45
OFFLINE
Отправлено 26 December 2015 - 20:41
)
#46
OFFLINE
Отправлено 26 December 2015 - 21:03
курили?
)
Неа, выхожу на выходные, закуриваю . Но думаю даже, если нельзя call прописать (хотя наверно можно), это можно будет обойти каким-нибудь тригером, к какой-нибудь подставной таблицей в базе. Ну ладно, пора завязывать вас мучить, общая картина прояснилась
. Огромное спасибо!
Сообщение отредактировал Dupont: 26 December 2015 - 21:24
#48
OFFLINE
Отправлено 18 January 2016 - 17:22
курили?
)
На данном этапе в коннекте. Следующий отчет о использование хранимых процедур и функций БД, вместо запросов SQL ... (думаю прям скоро)
Сообщение отредактировал Dupont: 18 January 2016 - 17:31
#49
OFFLINE
Отправлено 18 April 2016 - 23:26
Dupont, как у вас дела с вызовом хранимых процедур?
#50
OFFLINE
Отправлено 22 August 2016 - 22:30
так как в гугле на русском бъется имено эта тема, оставлю это тут
#51
OFFLINE
Отправлено 23 August 2016 - 15:40
Вопрос как вставить данные в 2 таблицы за один раз?
Ответ:
Создаем функцию для записи в базу (функция общая с выводом результатов, но в данном примере MySQL нам ничего не возвращает)
Dos_ext_SaveData ={ private["_parameters","_query","_result"]; _parameters = _this; _query = format["%1:%2:%3", 1, DBConId, _parameters]; _result = "extDB2" callExtension _query; _result };
Создаем в Ini фале запрос такого вида:
[AddDataTables] SQL1_1 = INSERT INTO SQL1_2 = mytable_one (PlayerUID,Worldspace,plimaryWeapon,LastUpdate) SQL1_3 = VALUES SQL1_4 = (?,?,?,CURRENT_TIMESTAMP) SQL2_1 = INSERT INTO SQL2_2 = mytable_two (PlayerUID,DataCreate,DataUpdate) SQL2_3 = VALUES SQL2_4 = (?,CURRENT_TIMESTAMP,CURRENT_TIMESTAMP) SQL1_INPUTS = 1,2,3 Number of Inputs = 3 SQL2_INPUTS = 1
где у нас SQL1_Х используется для первой таблицы (mytable_one ), а SQL2_Х для вставки данных во вторую таблицу (mytable_two ).
CURRENT_TIMESTAMP время занесения данных в базу (MySQL сам его берет с сервера).
Формируем запрос в SQF
_PlayerData = format ["%1:%2:%3",_playerUID,_playerPOS,_plimaryWeapon]; _Save = format["AddDataTables:%1", _PlayerData] call Dos_ext_SaveData;
значения для обоих таблиц пишутся в одну строку, а разбираются уже по номерам в SQL1_INPUTS и SQL2_INPUTS
ЗЫ. надеюсь мои каракули кто то поймет)
#52
OFFLINE
Отправлено 23 August 2016 - 19:36
Что то я пропустил это мимо ушей, пардон!
Какова была идея? Не моя идея.
База ведь не имеет открытый доступ. Хранимые процедуры и ф-ции по определению храняться в самой БД и доступны на выполнение, только зарегистрированным пользователям имеющим соответствующие права, как собственно и данные.
Идея была предоставить клиентам доступ к базе в обход сервера, ну, если я всё правильно понял.
То есть, доступ к базе имеет любой, потенциально любой, клиент.
Как база может не иметь открытый доступ, если к базе имеют доступ, пусть и зарегистрированные, но клиенты. Если к базе, кроме сервера, имеют доступ и клиенты, повторюсь, пусть и зарегистрированные в базе с некими правами доступа, я не долго думая определю эту базу как проходной двор.
И на сколько можно быть уверенным, в системе безопасности самой базы.
На моей памяти случай с базой под Дайз лингор, когда её хакнули, а она не была проходным двором!
А тут, добро пожаловать, заходите.
А что предложите клиентам у которых, ну например, нет постоянного айпи адреса? У таких сегодня айпи такой, а завтра другой, не всегда, но всё же. При каждом желании зайти на сервер списываться с владельцем сервера?
И с чего вы так уверены, что даже зарегистрированные клиенты будут все пушистые и в белом?