Welcome to Сообщество игровых серверов NETZONA.ORG

Присоединяйтесь к нам сейчас, чтобы получить доступ ко всем нашим функциям. Зарегистрировавшись и войдя в систему, вы сможете создавать темы, публиковать ответы в существующих темах, давать репутацию другим участникам, получать собственный личный мессенджер и многое другое. Это также быстро и совершенно бесплатно, так чего же вы ждете?
  • Приветствуем на сайте, Гость! Обязательно ознакомьтесь с условиями и правилами Публичной оферты Проекта NetZONA.org: https://netzona.org/help/public-offer/

  • Приветствуем на сайте, Гость! Обязательно ознакомьтесь с условиями и правилами использования Ваших файлов cookie на Проекте NetZONA.org: https://netzona.org/help/cookies/

  • Приветствуем на сайте, Гость! Обязательно ознакомьтесь с Политикой конфиденциальности Проекта NetZONA.org: https://netzona.org/pages/privacy-policy/

  • Ответы на основные вопросы: https://netzona.org/threads/populjarnye-voprosy-i-otvety-na-nix.6122/

  • Приветствуем на сайте, Гость! Приобрести (купить) Информационную услугу (в том числе группу "Проверенный") на Проекте NetZONA.org: https://netzona.org/account/upgrades

Вопрос по БД

DizzOut

Пользователь
Регистрация
11 Ноя 2018
Сообщения
55
Реакции
0
Баллы
21
Веб-сайт
vk.com
Клан-тег
Buhanka Squad
У меня вопрос как можно сделать самый простенький скрипт что-бы допустим хоть через команду он заносил в БД игрока.
То есть мне допустим надо сохранить игрока и к нему переменную и потом что-бы при ее выведении получилась та переменная.

Надеюсь вы поняли.
В заранее спасибо)
 

Hikka

Модератор
Команда форума
Проверенный
Регистрация
29 Сен 2016
Сообщения
555
Реакции
1
Баллы
60
Возраст
30
Пол
У меня вопрос как можно сделать самый простенький скрипт что-бы допустим хоть через команду он заносил в БД игрока.
То есть мне допустим надо сохранить игрока и к нему переменную и потом что-бы при ее выведении получилась та переменная.

Надеюсь вы поняли.
В заранее спасибо)
Я могу тебе предложить враппер для работы с БД, это куда проще чем вникать в целом в функции работы БД.
https://github.com/alexgrist/GLua-MySQL-Wrapper
Но так же и можешь разобрать его работу.

Автор функций Mr.Meow.
Lua:
function mysql:EasyWrite(tableName, where, data)
    if (!data or !istable(data)) then
        ErrorNoHalt("Easy MySQL error! Data has unexpected value type (table expected, got "..type(data)..")\n")
        return
    end

    if (!where) then
        ErrorNoHalt("Easy MySQL error! 'where' table is malformed! ([1] = "..type(where[1])..", [2] = "..type(where[2])..")\n")
        return
    end

    local query = self:Select(tableName)
        if (istable(where[1])) then
            for k, v in next, where do
                query:Where(v[1], v[2])
            end
        else
            query:Where(where[1], where[2])
        end

        query:Callback(function(result, status, lastID)
            if (istable(result) and #result > 0) then
                local updateObj = self:Update(tableName)

                    for k, v in next, data do
                        updateObj:Update(k, v)
                    end

                    updateObj:Where(where[1], where[2])
                    updateObj:Callback(function()
                        print("Easy MySQL updated data. ('"..tableName.."' WHERE "..where[1].." = "..where[2]..")")
                    end)

                updateObj:Execute()
            else
                local insertObj = self:Insert(tableName)

                    for k, v in next, data do
                        insertObj:Insert(k, v)
                    end

                    insertObj:Callback(function(result)
                        if (!istable(where[1])) then
                            print("Easy MySQL inserted data into '"..tableName.."' WHERE "..where[1].." = "..where[2]..".")
                        else
                            local msg = "Easy MySQL inserted data into '"..tableName.."' WHERE "
                            local i = 0

                            for k, v in next, where do
                                i = i + 1
                                msg = msg..v[1].." = "..v[2]

                                if (_table.Count(where) != i) then
                                    msg = msg.." AND "
                                end
                            end

                            print(msg)
                        end
                    end)

                insertObj:Execute()
            end
        end)

    query:Execute()
end

function mysql:EasyRead(tableName, where, callback)
    if (!where) then
        ErrorNoHalt("Easy MySQL Read error! 'where' table is malformed! ([1] = "..type(where[1])..", [2] = "..type(where[2])..")\n")
        return false
    end

    local query = self:Select(tableName)
        if (istable(where[1])) then
            for k, v in next, where do
                query:Where(v[1], v[2])
            end
        else
            query:Where(where[1], where[2])
        end

        query:Callback(function(result)
            local success, value = pcall(callback, result, (istable(result) and #result > 0))

            if (!success) then
                ErrorNoHalt("[EasyRead Error] "..value.."\n")
            end
        end)

    query:Execute()
end

Эти две функции упрощают работу с бд, для mysql_wrapper от alexGrist.

Пример работы.
Lua:
local queryObj = db:Create("players")
    queryObj:Create("key", "INT NOT NULL AUTO_INCREMENT")
    queryObj:Create("steamID", "VARCHAR(25) NOT NULL")
    queryObj:Create("name", "VARCHAR(255) NOT NULL")
    queryObj:PrimaryKey("key")
queryObj:Execute()

mysql:EasyWrite("players", {'steamID', self:SteamID()}, { // функция записи чего то в бд
    name = self:Name(),
})

mysql:EasyRead('players', {'steamID', self:SteamID()}, function(result, hasData) // читаем из бд.
    if (hasData) then // Если что-то есть в бд
        result = result[1]
        if (result)
            print(result.name)
        end
    else // нет такого игрока в бд
            mysql:EasyWrite('players', {'steamID', self:SteamID()}, { // добавляем игрока в бд и какие то поля..
                steamID = self:SteamID(),
                name = self:Name(),
            })
    end
end)

p.s Чем мне нравится сие враппер? Там можно в любой момент поменять модуль, sqlite или mysqloo или tmysql4(устарел)
 
Последнее редактирование:

DizzOut

Пользователь
Регистрация
11 Ноя 2018
Сообщения
55
Реакции
0
Баллы
21
Веб-сайт
vk.com
Клан-тег
Buhanka Squad
Я могу тебе предложить враппер для работы с БД, это куда проще чем вникать в целом в функции работы БД.
https://github.com/alexgrist/GLua-MySQL-Wrapper
Но так же и можешь разобрать его работу.

Автор функций Mr.Meow.
Lua:
function mysql:EasyWrite(tableName, where, data)
    if (!data or !istable(data)) then
        ErrorNoHalt("Easy MySQL error! Data has unexpected value type (table expected, got "..type(data)..")\n")
        return
    end

    if (!where) then
        ErrorNoHalt("Easy MySQL error! 'where' table is malformed! ([1] = "..type(where[1])..", [2] = "..type(where[2])..")\n")
        return
    end

    local query = self:Select(tableName)
        if (istable(where[1])) then
            for k, v in next, where do
                query:Where(v[1], v[2])
            end
        else
            query:Where(where[1], where[2])
        end

        query:Callback(function(result, status, lastID)
            if (istable(result) and #result > 0) then
                local updateObj = self:Update(tableName)

                    for k, v in next, data do
                        updateObj:Update(k, v)
                    end

                    updateObj:Where(where[1], where[2])
                    updateObj:Callback(function()
                        print("Easy MySQL updated data. ('"..tableName.."' WHERE "..where[1].." = "..where[2]..")")
                    end)

                updateObj:Execute()
            else
                local insertObj = self:Insert(tableName)

                    for k, v in next, data do
                        insertObj:Insert(k, v)
                    end

                    insertObj:Callback(function(result)
                        if (!istable(where[1])) then
                            print("Easy MySQL inserted data into '"..tableName.."' WHERE "..where[1].." = "..where[2]..".")
                        else
                            local msg = "Easy MySQL inserted data into '"..tableName.."' WHERE "
                            local i = 0

                            for k, v in next, where do
                                i = i + 1
                                msg = msg..v[1].." = "..v[2]

                                if (_table.Count(where) != i) then
                                    msg = msg.." AND "
                                end
                            end

                            print(msg)
                        end
                    end)

                insertObj:Execute()
            end
        end)

    query:Execute()
end

function mysql:EasyRead(tableName, where, callback)
    if (!where) then
        ErrorNoHalt("Easy MySQL Read error! 'where' table is malformed! ([1] = "..type(where[1])..", [2] = "..type(where[2])..")\n")
        return false
    end

    local query = self:Select(tableName)
        if (istable(where[1])) then
            for k, v in next, where do
                query:Where(v[1], v[2])
            end
        else
            query:Where(where[1], where[2])
        end

        query:Callback(function(result)
            local success, value = pcall(callback, result, (istable(result) and #result > 0))

            if (!success) then
                ErrorNoHalt("[EasyRead Error] "..value.."\n")
            end
        end)

    query:Execute()
end

Эти две функции упрощают работу с бд, для mysql_wrapper от alexGrist.

Пример работы.
Lua:
local queryObj = db:Create("players")
    queryObj:Create("key", "INT NOT NULL AUTO_INCREMENT")
    queryObj:Create("steamID", "VARCHAR(25) NOT NULL")
    queryObj:Create("name", "VARCHAR(255) NOT NULL")
    queryObj:PrimaryKey("key")
queryObj:Execute()

mysql:EasyWrite("players", {'steamID', self:SteamID()}, { // функция записи чего то в бд
    name = self:Name(),
})

mysql:EasyRead('players', {'steamID', self:SteamID()}, function(result, hasData) // читаем из бд.
    if (hasData) then // Если что-то есть в бд
        result = result[1]
        if (result)
            print(result.name)
        end
    else // ничего нет в бд и заносим нового игрока
        print(self:Name()..' new player added in to DB')
    end
end)

Спасибо. Попытаюсь разобраться)
 
Назад
Сверху Снизу