• Приветствуем на сайте, Гость! Обязательно ознакомьтесь с условиями и правилами Публичной оферты Проекта 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
  • Дата начала Дата начала

DizzOut

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

Надеюсь вы поняли.
В заранее спасибо)
 
У меня вопрос как можно сделать самый простенький скрипт что-бы допустим хоть через команду он заносил в БД игрока.
То есть мне допустим надо сохранить игрока и к нему переменную и потом что-бы при ее выведении получилась та переменная.

Надеюсь вы поняли.
В заранее спасибо)
Я могу тебе предложить враппер для работы с БД, это куда проще чем вникать в целом в функции работы БД.
Эта ссылка скрыта от группы "Гость" (группа пользователей, которые еще не прошли регистрацию или авторизацию на Проекте). Чтобы увидеть эту ссылку Вам требуется авторизоваться или пройти регистрацию на Проекте (зарегистрироваться).

Но так же и можешь разобрать его работу.

Автор функций 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(устарел)
 
Последнее редактирование:
Я могу тебе предложить враппер для работы с БД, это куда проще чем вникать в целом в функции работы БД.
Эта ссылка скрыта от группы "Гость" (группа пользователей, которые еще не прошли регистрацию или авторизацию на Проекте). Чтобы увидеть эту ссылку Вам требуется авторизоваться или пройти регистрацию на Проекте (зарегистрироваться).

Но так же и можешь разобрать его работу.

Автор функций 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)

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