[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум » Форум » Уроки SourceMod (SourcePawn) Скриптинга » Работа с MYSQL & SQLite (Подключение, запросы, примеры Взято с world-source.ru)
Работа с MYSQL & SQLite
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);  
}

Чтобы лучше это понимать, вы должны ознакомиться с запросами, какие они бывают (например, SELECTDELETEUPDATE), какой их синтаксис и т.д. - есть немало статей об этом и готовых примеров. 

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);
 
Форум » Форум » Уроки SourceMod (SourcePawn) Скриптинга » Работа с MYSQL & SQLite (Подключение, запросы, примеры Взято с world-source.ru)
  • Страница 1 из 1
  • 1
Поиск: