Инфо из sqlx.inc:
native SQL_ThreadQuery(Handle:db_tuple, const handler[], const query[], const data[]="", dataSize=0);
Синтаксис:
SQL_ThreadQuery(Handle:db_tuple, const handler[], const query[], const data[]="", dataSize=0)
- Handle:db_tuple - Кешированные данные о соединении с помощью функции SQL_MakeDbTuple
- const handler[] - Имя функции обработчика
- const query[] - Массив с запросом
- const data[]="" - Дополнительные данные
- dataSize=0 - Длина массива дополнительных данных
Функция обработчик:
Синтаксис:
public QueryHandler(failstate, Handle:query, error[], errnum, data[], size, Float:queuetime)
- failstate - Кака выполнен запрос, три варианта:
#define TQUERY_CONNECT_FAILED -2
#define TQUERY_QUERY_FAILED -1
#define TQUERY_SUCCESS 0 - Handle:query - Дескриптор к запросу, не обнуляете его
- error[] - Текст ошибки
- errnum - Номер ошибки
- data[] - Массив с данными
- size - Размер массива
- Float:queuetime - Время потраченное на обработку запроса
Тип функции:
Native
Пример:
/* Plugin generated by AMXX-Studio */
#include <amxmodx>
#include <amxmisc>
#include <sqlx>
#define PLUGIN "[SQLx.inc] SQL_ThreadQuery"
#define VERSION "1.0"
#define AUTHOR "Admin"
new Handle:SQL_Tuple
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
register_cvar("SQLx_host","127.0.0.1")
register_cvar("SQLx_db","amxxmodx")
register_cvar("SQLx_user","admin")
register_cvar("SQLx_password","pass")
}
public plugin_cfg(){
new host[33],dbase[33],user[33],pass[33]
get_cvar_string("SQLx_host",host,30)
get_cvar_string("SQLx_db",dbase,30)
get_cvar_string("SQLx_user",user,30)
get_cvar_string("SQLx_password",pass,30)
SQL_Tuple = SQL_MakeDbTuple(host,user,pass,dbase) // Создание картежа данных для соединения с БД
//Создание массива и подготовка запроса
new query[256]
format(query,charsmax(query),"SELECT * FROM table")
//Дополнительные данные
new data[2]
data[0] = 44
//Выполнение запроса
SQL_ThreadQuery(SQL_Tuple,"QueryHandler",query,data,charsmax(data))
}
//Функция вызванная запросом
public QueryHandler(FailState, Handle:Query, error[], err, data[], size, Float:querytime)
{
//Если произошла ошибка
if(FailState != TQUERY_SUCCESS)
{
log_amx("sql error: %d (%s)", err, error)
return
}
//Ошибки не было и если результат не нулевой
if( SQL_NumResults(Query) > 0 )
server_print("Sql result [%d] data[%d]",SQL_NumResults(Query),data[0])
}
Описание:
Прежде чем компилировать плагин, заполните необходимы графы для соединения с базой данных, а так же укажите таблицу в экспериментальном запросе.
Сделали? Поехали дальше:
В принципе если внимательно посмотреть на код, то все становится понятным и без лишних объяснений.
Хочу лишь обратить внимание на то, что функция вызывает запрос где то в коде, а работа с результатом происходит в другой, указанной вами функции.
Что в некоторых случая тоже очень удобно.
Другие примеры использования вы можете посмотреть в плагине climb и других плагинах.
Уже хотел сам добавлять.