Перейти к содержимому


Фотография

Как работает 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

 

Перейти к сообщению


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 51

#41 OFFLINE   dos622

dos622

    Ст. Прапорщик

  • Пользователи
  • 702 сообщений

Отправлено 26 December 2015 - 13:46

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


  • 0

#42 OFFLINE   Dupont

Dupont

    Ефрейтор

  • Пользователи
  • 48 сообщений
  • Откуда:Eburg

Отправлено 26 December 2015 - 13:52

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

call хранимая_функция_базы  -  это команда MySQL


  • 0

#43 OFFLINE   Dupont

Dupont

    Ефрейтор

  • Пользователи
  • 48 сообщений
  • Откуда:Eburg

Отправлено 26 December 2015 - 14:03

Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытое содержание


  • 0

#44 OFFLINE   Dupont

Dupont

    Ефрейтор

  • Пользователи
  • 48 сообщений
  • Откуда:Eburg

Отправлено 26 December 2015 - 14:09

 


можно любые команды и запросы поддерживаемые СУБД помещать.

 

совершенно верно.

 

 

С SQL та все понятно, просто я уточнял у вас про команды СУБДешки самой,  поддерживаемые в extDB2


Сообщение отредактировал Dupont: 26 December 2015 - 14:10

  • 0

#45 OFFLINE   dos622

dos622

    Ст. Прапорщик

  • Пользователи
  • 702 сообщений

Отправлено 26 December 2015 - 20:41

Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытое содержание

курили?:))


  • 0

#46 OFFLINE   Dupont

Dupont

    Ефрейтор

  • Пользователи
  • 48 сообщений
  • Откуда:Eburg

Отправлено 26 December 2015 - 21:03

Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытое содержание

курили? :))

Неа, выхожу на выходные, закуриваю :). Но думаю даже, если нельзя call прописать (хотя наверно можно), это можно будет обойти каким-нибудь тригером, к какой-нибудь подставной таблицей в базе. Ну ладно, пора завязывать вас мучить, общая картина прояснилась :) . Огромное спасибо!


Сообщение отредактировал Dupont: 26 December 2015 - 21:24

  • 0

#47 OFFLINE   Dupont

Dupont

    Ефрейтор

  • Пользователи
  • 48 сообщений
  • Откуда:Eburg

Отправлено 08 January 2016 - 18:03

SteelRat

Ты не ответил на вопрос, в чем фишка?


почему сервак с бд голый?


  • 0

#48 OFFLINE   Dupont

Dupont

    Ефрейтор

  • Пользователи
  • 48 сообщений
  • Откуда:Eburg

Отправлено 18 January 2016 - 17:22

Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытое содержание

курили? :))

На данном этапе в коннекте. Следующий отчет о использование хранимых процедур и функций БД, вместо запросов SQL ... (думаю прям скоро)


Сообщение отредактировал Dupont: 18 January 2016 - 17:31

  • 0

#49 OFFLINE   Ave_Ursus

Ave_Ursus

    Мл.сержант

  • Пользователи
  • 125 сообщений
  • Откуда:spb
  • Отряд:ex AS

Отправлено 18 April 2016 - 23:26

Dupont, как у вас дела с вызовом хранимых процедур?


  • 0

#50 OFFLINE   dos622

dos622

    Ст. Прапорщик

  • Пользователи
  • 702 сообщений

Отправлено 22 August 2016 - 22:30

так как в гугле на русском бъется имено эта тема, оставлю это тут

Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытое содержание

Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытое содержание


  • 0

#51 OFFLINE   dos622

dos622

    Ст. Прапорщик

  • Пользователи
  • 702 сообщений

Отправлено 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

 

ЗЫ. надеюсь мои каракули кто то поймет:))


  • 0

#52 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 сообщений
  • Откуда:РФ

Отправлено 23 August 2016 - 19:36

SteelRat

Ты не ответил на вопрос, в чем фишка?


почему сервак с бд голый?

 

 

Что то я пропустил это мимо ушей, пардон!

 

Какова была идея? Не моя идея.  

 

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

Идея была предоставить клиентам доступ к базе в обход сервера, ну, если я всё правильно понял.

То есть, доступ к базе имеет любой, потенциально любой, клиент.

 

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

И на сколько можно быть уверенным, в системе безопасности самой базы.

На моей памяти случай с базой под Дайз лингор, когда её хакнули, а она не была проходным двором!

А тут, добро пожаловать, заходите.

 

А что предложите клиентам у которых, ну например, нет постоянного айпи адреса? У таких сегодня айпи такой, а завтра другой, не всегда, но всё же. При каждом желании зайти на сервер списываться с владельцем сервера?

 

И с чего вы так уверены, что даже зарегистрированные клиенты будут все пушистые и в белом?


  • 0




Яндекс.Метрика