root | Дата: Воскресенье, 03.02.2013, 00:16 | Сообщение # 1 |
Генералиссимус
Группа: Администраторы
Сообщений: 561
Статус: Offline
| Работа с MYSQL & SQLite
Для начала вы должны добавить новую секцию в addons/sourcemod/configs/databases.cfg Если MYSQL, то такую:
Код "Nazvanie_Sekcii" { "driver" "mysql" "host" "ip или домен" "database" "база данных" "user" "пользователь" "pass" "пароль" "port" "3306" } Если SQLite, то такую:
Код "Nazvanie_Sekcii" { "driver" "sqlite" "host" "localhost" "database" "imya_bazi" "user" "root" "pass" "" } Само подключение можно осуществить таким образом:
Код #include <sourcemod>
new Handle:g_SQL = INVALID_HANDLE, bool:MYSQL;
public OnPluginStart() { if (!SQL_CheckConfig("Nazvanie_Sekcii")) { SetFailState("Секция \"Nazvanie_Sekcii\" не найдена в databases.cfg"); return; }
decl String:error[256]; g_SQL = SQL_Connect("Nazvanie_Sekcii", true, error, 256); if (g_SQL == INVALID_HANDLE) { LogError(error); SetFailState("Не удалось установить SQL соединение"); return; }
// тип соединения (mysql или sqlite) new String:driver[15]; SQL_ReadDriver(g_SQL, driver, 15); MYSQL = StrEqual(driver, "mysql", false); LogMessage("Установлено %s соединение", MYSQL ? "MYSQL" : "SQLite");
// создаем таблицу if (!MYSQL) { SQL_TQuery(g_SQL, SQL_DefCallback, "CREATE TABLE IF NOT EXISTS `my_tab` (\ steamid TEXT PRIMARY KEY, \ points NUMERIC, \ nick TEXT)", 0); } else { SQL_TQuery(g_SQL, SQL_DefCallback, "CREATE TABLE IF NOT EXISTS `my_tab` (\ `steamid` varchar(25) NOT NULL, \ `points` int(20) NOT NULL, \ `nick` varchar(32) NOT NULL, \ PRIMARY KEY (`steamid`))", 0); } }
public SQL_DefCallback(Handle:owner, Handle:hndl, const String:error[], any:data) { if (hndl == INVALID_HANDLE) LogError(error); } Чтобы лучше это понимать, вы должны ознакомиться с запросами, какие они бывают (например, SELECT, DELETE, UPDATE), какой их синтаксис и т.д. - есть немало статей об этом и готовых примеров.
g_SQL - глобальная Handle переменная для хранения результата подключения к БД. Если g_SQL == INVALID_HANDLE, то подключение не удалось.
SQL_ReadDriver - позволяет определить драйвер, тип подключения. Это полезно, т.к. есть небольшая разница между MYSQL и SQLite запросами (а именно в синтаксисе).
Если используется SQLite соединение, то база будет храниться в addons/sourcemod/data/sqlite Вместо SQL_CheckConfig и SQL_Connect("Nazvanie_Sekcii" .. можно использовать и это:
Код new Handle:kv = CreateKeyValues(""); KvSetString(kv, "driver", "sqlite"); KvSetString(kv, "host", "localhost"); KvSetString(kv, "database", "imya_bazi"); KvSetString(kv, "user", "root"); KvSetString(kv, "pass", "");
decl String:error[255]; g_SQL = SQL_ConnectCustom(kv, error, 255, true); CloseHandle(kv); Чтобы создать SQLite соединение, есть более простой вариант:
Код decl String:error[256]; g_SQL = SQLite_UseDatabase("imya_bazi", error, 256);
|
|
| |