Главная | Комментарии | О проекте
Чтение RSS
Суперсайт
Главная Контакты Карта сайта Добавить в избранное
  • Кто OnLine

    Всего на сайте: 11
    Гостей: 2
    Пользователи: Vladislav_Sykes
    Роботы: robot Bot, crawl Bot, Yandex Bot, Yandex Bot, Yandex Bot, robot Bot, Yandex Bot, Google AdSense

    Опрос пользователей

    Для какого мода Вы пишите плагины?

    • Популярное

    Рекомендуем

    • AMX Mod X
    • up.org.ua

    Наши друзья


  • Автор: Admin Дата: 21-04-2012, 12:42 Просмотров: 6663

    SQL_ThreadQuery Функция готовит и выполняет поточный запрос к базе данных

    Отличительная особенность функции SQL_ThreadQuery заключается не в ее более сложном использовании, а в том что она создает поточный запрос к базе данных, то есть если запрос требует значительного времени а обработку, функция не " встанет" и не будет ждать ответа от сервера и не будет происходить задержка игры ( лаги ). Кроме того соединение с базой данных происходит каждый раз как и разъединение. То есть нет постоянного конекта с БД.

    Инфо из 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 и других плагинах.
    Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
    Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.
    Monstr™

    29.09.2011
    ICQ: 631967458
    Публикаций: 12
    Комментариев: 22
    Репутация: -  0  +

    Неужели ты ее добавил =)
    Уже хотел сам добавлять.
    Uzarik

    --
    ICQ: --
    Публикаций: 0
    Комментариев: 0
    Репутация: -  0  +

    Как быть, если в таблице поле в кодировке UTF-8 и символы соответственно там русские?

    Указание set names utf8 при установке соединения не помогает для этой функции. (для всех остальных работает)
    JaGeR_ch

    28.11.2011
    ICQ: --
    Публикаций: 0
    Комментариев: 1
    Репутация: -  0  +

    Хотелось бы побольше инфы на тему mysqlx .
    И вопрос : как создавайть таблицу ?
    StRiKeR.csF

    --
    ICQ: --
    Публикаций: 0
    Комментариев: 0
    Репутация: -  0  +

    JaGeR_ch,
    CREATE TABLE

    Информация

    Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.
Наверх

Реклама