PDA

Просмотр полной версии : [Урок] Загрузка информации из базы данных MySQL.



Ray_Grand
05.02.2016, 10:25
Продолжаем оживлять раздел с MTA :blush2:. Не так уж и много Русскоязычных уроков/мануалов о создании в MTA различных систем, в особенности на MySQL. Лично я ещё вчера искал на просторах интернета информацию о том, как загружать данные (например информацию о транспорте), но ничего нужного мне не нашел. Поэтому решил сам написать урок, в котором будет предоставлен пример банальной загрузки данных и создания транспорта.

Задействована будет всего - лишь одна функция, которая будет расположена на серверной части ресурса.
И так, создаем таблицу в которой будет информация о транспорте. Скриншот со структурой таблицы ниже.
http://i008.radikal.ru/1602/e3/73ee52d2d989.png
У кого не грузит скриншот, клик сюда. (http://i008.radikal.ru/1602/e3/73ee52d2d989.png)

Теперь переходим непосредственно к коду, в файле где у вас серверная часть пишем:

local vehicle = {} //Эта переменная служит хранилищем всех данных о транспорте.

addEventHandler("onResourceStart", getResourceRootElement(), function() //Функция, которая при загрузке ресурса (onResourceStart, будет следом загружать весь транспорт.
local time = getTickCount() //Переменная, которая понадобиться нам для того, чтобы узнать за сколько миллисекунд загрузился транспорт.
local result = mysql_query(database, "SELECT * FROM `cars`") //Запрос на получение данных из таблицы с транспортом.
local count = 0 //Переменная, в которую записывается число загруженного транспорта.
if(result) then //Если запрос успешен - идём дальше.
while true do //Цикл
local row = mysql_fetch_assoc(result)
if not row then break end //Если нечего загружать - останавливаем цикл и дальнейшую загрузку.
local id = tonumber(row["id"]) //Записываем в переменную "id", номер (id) транспорта из базы данных.
local model = tonumber(row["model"]) //Записываем в переменную модель транспорта
local x = tonumber(row["x"]) //Записываем х координату
local y = tonumber(row["y"]) //Записываем y координату
local z = tonumber(row["z"]) //Записываем z координату
vehicle[id] = createVehicle (model, x, y, z) //Создаем сам транспорт на сервере.
//В коде ниже, мы не просто в локальную переменную, нужную только для загрузки записываем данные, а в переменную которая может работать во всем серверном скрипте.
//Если сравнивать переменную (или еще можно назвать - таблицу) local vehicle = {} на Lua и Pawn, то в Pawn это можно представить примерно как new VehicleInfo[MAX_VEHICLES][data];, то вместо "data" будет использоваться название "ключа", которое используется внутри функций setElementData, думаю понятно тут объяснил.
setElementData(vehicle[id], "vehicle:id", id)
setElementData(vehicle[id], "vehicle:model", model)
setElementData(vehicle[id], "vehicle:x", x)
setElementData(vehicle[id], "vehicle:y", y)
setElementData(vehicle[id], "vehicle:z", z)
count = count + 1 //Прибавляем +1 к переменной которая хранит количество загруженного транспорта.
end
mysql_free_result(result) //Очищаем результат запроса
end
outputDebugString("Cars: "..count.." | Time: "..(getTickCount() - time).."ms") //Выводим в консоль информацию о загруженном транспорте.
end)

http://s018.radikal.ru/i514/1602/56/fc93df2ecd01.png
У кого не грузит скриншот, клик сюда. (http://s018.radikal.ru/i514/1602/56/fc93df2ecd01.png)

Автор: Ray_Grand (http://pro-pawn.ru/member.php?4662-Ray_Grand)
С радостью выслушаю любую адекватную критику по коду, от более опытных пользователей.

Урок был написан специально для Pro-Pawn, копирование на другие ресурсы без разрешения автора - запрещено!

Disinterpreter
05.02.2016, 14:20
Использовать Mysql модуль не рекомендуется, это не безопасно.

Ray_Grand
05.02.2016, 14:31
А что тогда посоветуете использовать, если модуль MySQL не безопасен? Точно не в файлах же хранить данные.

Disinterpreter
05.02.2016, 14:48
А что тогда посоветуете использовать, если модуль MySQL не безопасен? Точно не в файлах же хранить данные.

https://wiki.multitheftauto.com/wiki/DbConnect

5й по счету пример.

Daniel_Cortez
05.02.2016, 14:54
А что тогда посоветуете использовать, если модуль MySQL не безопасен? Точно не в файлах же хранить данные.
Как вам уже ответили выше, в MTA MySQL поддерживается из коробки.
И в файлах таки можно хранить данные, если маршализовать их и впоследствии загружать как скрипт на Lua.