
- ESX
- QBCore
- vRP
Par Luke

Déplacez une ressource de mysql-async vers oxmysql en modifiant sa configuration de pilote et en examinant les paramètres, la valeur de retour et la gestion des erreurs de chaque requête. Une migration de pilote ne nécessite pas de réécrire votre schéma de base de données et ne garantit pas un gameplay plus rapide.
Sauvegardez la base de données et les ressources correspondantes, puis travaillez sur une copie isolée. Inventoriez chaque ressource utilisant mysql-async et vérifiez si votre framework nécessite déjà oxmysql. Enregistrez la version du pilote installé. Examinez la source oxmysql et les instructions d'installation pour cette version avant de changer de pilote.
In the active server.cfg, keep the existing private mysql_connection_string setting above ensure oxmysql. Démarrez les ressources dépendantes par la suite. Ne publiez pas les identifiants de connexion dans les journaux de support. Supprimez l'ancien démarrage du pilote seulement après que toutes les ressources dépendantes aient été prises en compte.
Dans chaque ressource Lua qui utilise le MySQL global, chargez la bibliothèque avant ses scripts serveur :
server_scripts {
'@oxmysql/lib/MySQL.lua',
'server/*.lua'
}
dependency 'oxmysql'Utilisez MySQL.query.await pour un ensemble de lignes, MySQL.single.await pour une ligne, MySQL.scalar.await pour une valeur, MySQL.insert.await pour un ID d'insertion et MySQL.update.await pour les lignes affectées. Vérifiez le retour documenté pour votre requête ; un résultat vide est différent d'une erreur.
Cet exemple côté serveur teste un aller-retour paramétré sans toucher à une table de jeu. Exécutez-le à partir d'une ressource après le démarrage d'oxmysql :
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)Remplacer les valeurs utilisateur interpolées par des valeurs positionnelles ? des espaces réservés et un tableau de paramètres ordonnés. Les identifiants de table et de colonne nécessitent une liste autorisée fixe ; les espaces réservés de valeur ne peuvent pas sélectionner des identifiants SQL arbitraires.
Await modifie le flux de contrôle : utilisez le résultat après le retour de await, gérez les lignes manquantes et les exceptions, et vérifiez si le joueur est toujours connecté avant d'agir. Une écriture SQL réussie ne met pas automatiquement à jour l'état du joueur en mémoire d'un framework.
Utilisez la transaction documentée du pilote API pour le travail groupé SQL. Séparer START TRANSACTION, requête et COMMIT les appels via un pool de connexions ne garantissent pas que toutes les instructions utilisent la même connexion.
Une transaction réussie signifie que ses SQL instructions n'ont pas échoué. UPDATE affecter zéro ligne peut toujours être valide SQL. La logique de paiement et d'inventaire doit appliquer explicitement les conditions commerciales ; ne copiez pas un extrait générique de transfert de solde dans une économie réelle.
Planifiez une fenêtre de maintenance, déployez l'ensemble pilote/ressource correspondant et exécutez les mêmes vérifications. Gardez l'ancien ensemble privé pour la restauration. Restaurez une sauvegarde de base de données uniquement si nécessaire pour les données ou le schéma modifiés, et tenez compte de toutes les écritures depuis cette sauvegarde. La conversion de texte vers un jeu de caractères plus petit n'est pas une restauration générique sûre.





