AMX MOD X
Четверг, 01.01.2026, 14:13:49



Приветствую Вас Гость | RSS
[ Главная ] [ sql - AMX Mod X Форум ] [ Регистрация ] [ Вход ]
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]

Вниманию участников! Данный форум теперь является архивом и вскором времени здесь нельзя будет создавать новых тем! Просьба всем для общения и создания новых тем перейти на наш новый форум: http://amxmodx.su/

  • Страница 1 из 1
  • 1
Модератор форума: slogic, AlMod  
sql
max_ripДата: Вторник, 02.10.2007, 11:57:15 | Сообщение # 1
Подполковник
Группа: Пользователи
Сообщений: 147
Репутация: 0
Статус: Не в сети
И так использую в своем плагине работу с mysql.
В линухе все проходит тихо мирно и красиво, но в виндовсе подключение создается через ОБДЦ и при этом настраивать пользователя надо уже в ОБДЦ, но админский плаг использует теже самые функции и при этом использует собственную библиотеку.
первая версия была написана с использованием bdi, теперь переписано под sqlx, но толку как говорится ноль.
кусок подключения

Code

#include <amxmodx>
#include <amxmisc>
#include <dbi>
#include <sqlx>

#define PLUGIN "ip name access"
#define VERSION "0.2"
#define AUTHOR "RIP"

/* ADMIN_IMMUNITY Flag (amxconst.inc for more info) */
#define IMMUNITY_LEVEL             (1<<0)  /* flag "a" */

#define DEBUG
new ipnamehost[64], ipnameuser[32], ipnamepass[32], ipnamedb[32], ipnametable[32],ipnamemessadge[254];
new g_config[64]
new Handle:g_DbInfo

public plugin_init() {
      register_plugin(PLUGIN, VERSION, AUTHOR)
      register_cvar("ip_name_db_host","127.0.0.1")
      register_cvar("ip_name_db_user","user")
      register_cvar("ip_name_db_pass","pass")
      register_cvar("ip_name_db_name","amxxmodx")
      register_cvar("ip_name_messadge","net dostupa")
      register_cvar("ip_name","1")
      register_cvar("ip_name_bad_sql_kick","1")
      get_configsdir(g_config,63)
      server_cmd("exec %s/ipname.cfg", g_config)
      #if definded DEBUG
   server_print("[IPANME] plugin is start")
      #endif
}

public plugin_cfg() {
          //Forces server to clear the exec buffer and load all the cvars
          server_exec()
}

public client_authorized(id){
      load_pscvars()
..............
   new Handle:db = SQL_Connect(g_DbInfo,errnum,error,254)
          if (db == Empty_Handle ) {
       //bad connect
              server_print("[IPNAME] MYSQL connect error: '%s','%s' (%s,%s,%s)", error,errnum, ipnamehost, ipnameuser, ipnamedb)
    if (get_cvar_num("ip_name_bad_sql_kick")==1){
        server_cmd("kick #%d data server is down, please wait",userid)
    }
                  SQL_FreeHandle(db)
                  SQL_FreeHandle(g_DbInfo)
              return PLUGIN_HANDLED
..............
}

load_pscvars() {
      get_cvar_string("ip_name_db_host", ipnamehost, 63)
      get_cvar_string("ip_name_db_user", ipnameuser, 31)
      get_cvar_string("ip_name_db_pass", ipnamepass, 31)
      get_cvar_string("ip_name_db_name", ipnamedb, 31)
      get_cvar_string("ip_name_messadge",ipnamemessadge,253)
      get_cvar_string("ip_name_table",ipnametable,31)
      g_DbInfo = SQL_MakeDbTuple(ipnamehost, ipnameuser, ipnamepass, ipnamedb)
      #if defined DEBUF
          server_print("[IPNAME] config loaded")
      #endif
}
          


Сообщение отредактировал max_rip - Вторник, 02.10.2007, 11:58:27
 
slogicДата: Вторник, 02.10.2007, 16:46:43 | Сообщение # 2
Генералиссимус
Группа: Админы
Сообщений: 1941
Репутация: 47
Статус: Не в сети
mysqlclient.lib используется. см. исходники модуля mysqlx. так что при чем тут ODBC мне непонятно.

из твоего кода выдраны важные моменты, либо их нет. советую посмотреть пример scripting/testsuite/sqlxtest.sma

Сообщение отредактировал slogic - Вторник, 02.10.2007, 16:47:18
 
max_ripДата: Среда, 03.10.2007, 14:27:33 | Сообщение # 3
Подполковник
Группа: Пользователи
Сообщений: 147
Репутация: 0
Статус: Не в сети
slogic, например какие важные моменты?
я показал только конект, больше я думаю не нужно, для этого надо сделать хендл с инфой куда конектитьтся при помощи SQL_MakeDbTuple.
после этого вызываем new Handle:db = SQL_Connect(g_DbInfo,errnum,error,254), дальше вас не должно уже не чего интересовать, так как на этом моменте идет подключение к базе скл, и вылетает в логе что пытается заюзать пользователь ОБДЦ почему-то, и только в виндах, так как у самого только линуха могу только улыбнуться )
 
slogicДата: Четверг, 04.10.2007, 15:55:58 | Сообщение # 4
Генералиссимус
Группа: Админы
Сообщений: 1941
Репутация: 47
Статус: Не в сети
я не заметил, что ты создаешь g_DbInfo. окзывается ты делаешь это в отдельной функции.

я бы не стал выполнять g_DbInfo = SQL_MakeDbTuple(ipnamehost, ipnameuser, ipnamepass, ipnamedb) каждый раз когда проходит авторизация клиента. это надо делать в plugin_cfg() один раз. у тебя что, динамически меняется логин к базе? ты создаешь себе много лишнего гемора.

что ты хочешь сказать, возвращая return PLUGIN_HANDLED в client_authorized() ?

 
max_ripДата: Четверг, 04.10.2007, 19:59:52 | Сообщение # 5
Подполковник
Группа: Пользователи
Сообщений: 147
Репутация: 0
Статус: Не в сети
slogic, честно говоря сам толком еще не понимаю, сам отучился на другие языки.
return PLUGIN_HANDLED прсто взял с какого-то примера, наверно лучше всего просто return юзать.
по поводу g_DbInfo = SQL_MakeDbTuple, т.к. настройки берутся с cvar то вроде бы можно назвать это гибкостью, но согласен гемор, можно это конечно делать и один раз.
но все равно, это все лирика.

тут сделал мини код для проверки, если не трудно запустите плиз его на виндовых машинах, настройки мускуля в коде.
Code
#include <amxmodx>
#include <amxmisc>
#include <dbi>
#include <sqlx>

#define PLUGIN "test sql for windows and linux"
#define VERSION "0.1"
#define AUTHOR "RIP"

#define DEBUG
new Handle:g_DbInfo
public plugin_init() {
     register_plugin(PLUGIN, VERSION, AUTHOR)
     #if defined DEBUG
   server_print("[TEST_SQL] plugin is start")
     #endif
        new errnum ,error[255]
      g_DbInfo = SQL_MakeDbTuple("127.0.0.1", "root", "", "amx")//host,user,pass,db
   #if defined DEBUG
    server_print("[TEST_SQL] start sql connect")
   #endif
   new Handle:db = SQL_Connect(g_DbInfo,errnum,error,254)
   if (db == Empty_Handle ) {
      //bad connect
             server_print("[TEST_SQL] MYSQL connect error: '%s','%s'", error,errnum)
   } else {
    server_print("[TEST_SQL] o my god, it's work!!!")
   }
   SQL_FreeHandle(db)
         SQL_FreeHandle(g_DbInfo)
     return PLUGIN_HANDLED
}

PS чо то не работает кнопочка просмотреть, нажимаешь чо то думает а не фига не показывает, хотя может блокировка всплывающих окон )

 
slogicДата: Пятница, 05.10.2007, 13:51:29 | Сообщение # 6
Генералиссимус
Группа: Админы
Сообщений: 1941
Репутация: 47
Статус: Не в сети
В modules.ini раскомментировал только mysql

Поправил код:

Code

#include <amxmodx>  
#include <sqlx>  

#define PLUGIN "test sql for windows and linux"  
#define VERSION "0.1"  
#define AUTHOR "RIP"  

#define DEBUG  

new Handle:g_DbInfo

public plugin_init()  
{  
  register_plugin(PLUGIN, VERSION, AUTHOR)  
#if defined DEBUG
  server_print("[TEST_SQL] plugin is start")  
#endif  
  new errnum, error[255]

  g_DbInfo = SQL_MakeDbTuple("127.0.0.1", "root", "password", "db") //host,user,pass,db
#if defined DEBUG  
     server_print("[TEST_SQL] start sql connect")
#endif  
  new Handle:db = SQL_Connect(g_DbInfo, errnum, error, sizeof(error)-1)
  if (!db) {  
   // bad connect  
   server_print("[TEST_SQL] MYSQL connect error: [%d] %s", errnum, error)
  } else {  
   server_print("[TEST_SQL] o my god, it's work!!!")  
  }  
     
  SQL_FreeHandle(db)
  SQL_FreeHandle(g_DbInfo)
}

На всякий сулчай, что у меня загружено и каких версий:

Code

] meta list
Currently loaded plugins:
       description      stat pend  file              vers      src  load  unlod
  [ 1] AMX Mod X        RUN   -    amxmodx_mm.dll    v1.76d    ini  ANY   ANY   
  [ 2] POD-Bot mm       RUN   -    podbot_mm.dll     v3.0B18c  ini  Chlvl ANY   
  [ 3] Playername       RUN   -    playername_mm.dl  v2.81     ini  Chlvl Pause
  [ 4] AXN              RUN   -    axn_mm.dll        v1.6.1    ini  Chlvl Chlvl
  [ 5] MySQL            RUN   -    mysql_amxx.dll    v1.76b    pl1  ANY   ANY   
  [ 6] Fun              RUN   -    fun_amxx.dll      v1.76     pl1  ANY   ANY   
  [ 7] CStrike          RUN   -    cstrike_amxx.dll  v1.76     pl1  ANY   ANY   
  [ 8] CSX              RUN   -    csx_amxx.dll      v1.76c    pl1  ANY   ANY   
  [ 9] Ham Sandwich     RUN   -    hamsandwich_amxx  v1.8      pl1  ANY   ANY   
  [10] FakeMeta         RUN   -    fakemeta_amxx.dl  v1.76d    pl1  ANY   ANY   
  [11] Engine           RUN   -    engine_amxx.dll   v1.76     pl1  ANY   ANY   
  [12] CSDM2            RUN   -    csdm_amxx.dll     v2.1i     pl1  ANY   ANY   

Резюме: успешно соединился

ЗЫ. Версия MySQL - 4.0.21

Сообщение отредактировал slogic - Пятница, 05.10.2007, 14:08:38
 
max_ripДата: Вторник, 09.10.2007, 21:34:53 | Сообщение # 7
Подполковник
Группа: Пользователи
Сообщений: 147
Репутация: 0
Статус: Не в сети
пока по асе кинул код тестеру, у него мускуль 5.0.45-community-nt, выдает ошибку что пользователю OBDC@localhost запрещен доступ, пока кинул на форум ds.ru пусть побольше людей попробует его компильнуть в виндах. Может есть какие-то грабли +).

add получил картинку с ошибкой, все гут там просто теперь мускуля ошибки, теперь корректно передается имя юзера, хотя блин такой тестер, что мог не по той тропе пустить.

PS но все равно хочется увидеть побольше результатов

Добавлено (2007-10-09, 9:34 Pm)
---------------------------------------------
Спасибо, все работает как надо.

Сообщение отредактировал max_rip - Пятница, 05.10.2007, 17:52:37
 
  • Страница 1 из 1
  • 1
Поиск:

AMX Mod X Russian Community © 2006-2026