|
Вниманию участников! Данный форум теперь является архивом и вскором времени здесь нельзя будет создавать новых тем! Просьба всем для общения и создания новых тем перейти на наш новый форум: http://amxmodx.su/
|
sql
|
|
| max_rip | Дата: Вторник, 02.10.2007, 11:57:15 | Сообщение # 1 |
|
Подполковник
Группа: Пользователи
Сообщений: 147
Статус: Не в сети
| И так использую в своем плагине работу с 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
Статус: Не в сети
| 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
Статус: Не в сети
| slogic, например какие важные моменты? я показал только конект, больше я думаю не нужно, для этого надо сделать хендл с инфой куда конектитьтся при помощи SQL_MakeDbTuple. после этого вызываем new Handle:db = SQL_Connect(g_DbInfo,errnum,error,254), дальше вас не должно уже не чего интересовать, так как на этом моменте идет подключение к базе скл, и вылетает в логе что пытается заюзать пользователь ОБДЦ почему-то, и только в виндах, так как у самого только линуха могу только улыбнуться )
|
| |
|
|
| slogic | Дата: Четверг, 04.10.2007, 15:55:58 | Сообщение # 4 |
|
Генералиссимус
Группа: Админы
Сообщений: 1941
Статус: Не в сети
| я не заметил, что ты создаешь 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
Статус: Не в сети
| 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
Статус: Не в сети
| В 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
Статус: Не в сети
| пока по асе кинул код тестеру, у него мускуль 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 |
| |
|
|
 | AMX Mod X Russian Community © 2006-2026  |  |
|
| |