SerweryWłasny serwerDla twórcówForumFAQDokumentacjaBezpieczeństwo
Pobierz launcher
  1. Dokumentacja
  2. Funkcje serwera
  3. dbFetch

Funkcja

dbFetch

SerwerBaza danychTylko Trilogy Hub

Wykonuje zapytanie i od razu zwraca wynik. Jedno wywołanie zamiast dbQuery, dbPoll i dbFree. Działa z SELECT, INSERT, UPDATE i DELETE.

Składnia

table dbFetch(element connection, string query, mixed ...)

Argumenty

connectionelement
Uchwyt z dbConnect.
querystring
Zapytanie SQL z ? w miejscu wartości.
...mixed
Wartości wstawiane w miejsce ?, bezpiecznie zacytowane.

Zwraca

Tablica wierszy (każdy wiersz to kolumna = wartość). Dodatkowo rows.insertId (ID wstawionego wiersza), rows.affectedRows (liczba zmienionych wierszy) i rows.columns (nazwy kolumn po kolei). Przy błędzie false i opis błędu.

Przykład

local db = dbConnect("mysql", "glowna")

addCommandHandler("top", function(player)
    async(function()
        local rows, err = dbFetch(db, "SELECT nick, kasa FROM gracze ORDER BY kasa DESC LIMIT 5")
        if not rows then
            outputChatBox("Błąd bazy: " .. err, player)
            return
        end
        for i, row in ipairs(rows) do
            outputChatBox(i .. ". " .. row.nick .. " - $" .. row.kasa, player)
        end
    end)
end)

addCommandHandler("rejestracja", function(player)
    async(function()
        local result = dbFetch(db, "INSERT INTO gracze (nick, kasa) VALUES (?, ?)", getPlayerName(player), 500)
        if result then
            outputChatBox("Twoje konto ma numer " .. result.insertId, player)
        end
    end)
end)

Uwagi

Najprościej w async. W zadaniu async(function() ... end) serwer nie czeka na bazę: wstrzymane jest tylko to zadanie, a gra i inne skrypty działają dalej. Poza zadaniem dbFetch też działa, ale serwer stoi, dopóki baza nie odpowie. Przy szybkim SQLite to bez znaczenia, przy MySQL używaj async.

Pola insertId i affectedRows nie przeszkadzają. ipairs, pairs i #rows widzą tylko wiersze. Wartość NULL z bazy przychodzi jako false.

Zobacz też