
- ESX
- QBCore
- vRP
Von Luke

Verschiebe eine Ressource von mysql-async zu oxmysql, indem du die Treiberkonfiguration änderst und die Parameter, Rückgabewerte und Fehlerbehandlung jeder Abfrage überprüfst. Eine Treiber-Migration erfordert keine Neuschreibung deines Datenbankschemas und garantiert keine schnellere Spielleistung.
Sichere die Datenbank und die entsprechenden Ressourcen und arbeite dann an einer isolierten Kopie. Inventarisiere jede Ressource, die mysql-async verwendet, und prüfe, ob dein Framework bereits oxmysql benötigt. Notiere die installierte Treiberversion. Überprüfe die oxmysql-Quelle und Installationsanweisungen für diese Version, bevor du die Treiber wechselst.
In the active server.cfg, keep the existing private mysql_connection_string setting above ensure oxmysql. Start dependent resources afterwards. Do not publish connection credentials in support logs. Remove the old driver startup only after every dependent resource has been accounted for.
Lade in jeder Lua-Ressource, die das globale Objekt MySQL verwendet, die Bibliothek vor ihren Server-Skripten:
server_scripts {
'@oxmysql/lib/MySQL.lua',
'server/*.lua'
}
dependency 'oxmysql'Verwende MySQL.query.await für eine Reihe von Zeilen, MySQL.single.await für eine Zeile, MySQL.scalar.await für einen Wert, MySQL.insert.await für eine Einfüge-ID und MySQL.update.await für betroffene Zeilen. Überprüfe die dokumentierte Rückgabe für deine Abfrage; ein leeres Ergebnis unterscheidet sich von einem Fehler.
Dieses serverseitige Beispiel testet eine parametrisierte Roundtrip-Verbindung, ohne eine Gameplay-Tabelle zu berühren. Führe es von einer Ressource aus, nachdem oxmysql gestartet wurde:
CreateThread(function()
local ok, value = pcall(function()
return MySQL.scalar.await('SELECT ?', { 'connection-ok' })
end)
if ok and value == 'connection-ok' then
print('Database parameter check passed.')
else
print('Database parameter check failed; inspect the server log privately.')
end
end)Ersetze interpolierte Benutzerwerte durch positionale ? -Platzhalter und eine geordnete Parametertabelle. Tabellen- und Spaltenbezeichner erfordern eine feste Zulassungsliste; Wertplatzhalter können keine beliebigen SQL-Bezeichner auswählen.
Await ändert den Kontrollfluss: Verwende das Ergebnis, nachdem der Await zurückkehrt, behandle fehlende Zeilen und Ausnahmen und überprüfe, ob der Spieler noch verbunden ist, bevor du handelst. Ein erfolgreicher SQL-Schreibvorgang aktualisiert nicht automatisch den In-Memory-Spielerstatus eines Frameworks.
Verwende die dokumentierte Transaktions-API des Treibers für gruppierte SQL-Arbeiten. Separate START TRANSACTION, Abfrage und COMMIT Aufrufe über einen Verbindungspool garantieren nicht, dass alle Anweisungen dieselbe Verbindung verwenden.
Eine erfolgreiche Transaktion bedeutet, dass ihre SQL-Anweisungen nicht fehlgeschlagen sind. Ein UPDATE , das keine Zeile verändert, kann trotzdem gültiges SQL sein. Zahlungs- und Inventarlogik müssen die fachlichen Bedingungen ausdrücklich prüfen; kopiere kein allgemeines Beispiel für Guthabenübertragungen in eine Live-Spielwirtschaft.
Plane ein Wartungsfenster ein, stelle den passenden Treiber/Ressourcen-Satz bereit und führe dieselben Prüfungen durch. Halte den alten Satz für ein Rollback privat. Stelle ein Datenbank-Backup nur wieder her, wenn es für geänderte Daten oder Schemata erforderlich ist, und berücksichtige alle Schreibvorgänge seit diesem Backup. Das Zurückkonvertieren von Text in einen kleineren Zeichensatz ist kein sicheres generisches Rollback.





