Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 19

Тема: Перевод сервера с MySQL R6 на MySQL R7 (урок / помощь)

  1. #1
    Разработчик RP GameWorld Аватар для Splav
    Регистрация
    05.06.2010
    Адрес
    Нижний Новгород
    Возраст
    27
    Сообщений
    1,915
    Репутация: 190

    Звание: - весьма и весьма положительная личность

    Перевод сервера с MySQL R6 на MySQL R7 (урок / помощь)

    Всем доброго времени суток!

    Начнем с того, что не так давно был обновлен плагин MySQL от BlueG до версии R7
    Отличительной особенностью данного плагина стала стабильная поддержка потоков. Если кто знает, в R6(-2) частое создание потоков приводило к крешу сервера

    Но R7 (в силу понятных причин) теперь не поддерживает непоточные скрипты. Это вызывает проблемы у скриптеров

    В данном уроке я расскажу вам, как перевести скрипт на R7.
    Если возникнут какие-то вопросы, пишите в данной теме, я по мере возможности буду отвечать

    Начнем...

    Для начала посмотрим какие функции и коллбеки были убраны в R7. Это mysql_query, mysql_fetch_int, mysql_fetch_float, OnQueryFinish.

    Начнем с простого...

    1. Допустим, есть код следующего вида:

    PHP код:
    mysql_query_callback(1"SELECT myid FROM players LIMIT 1""QueryCallback");
    //.....................//
    forward QueryCallback(queryindexextraidconnectionHandle);
    public 
    QueryCallback(queryindexextraidconnectionHandle)
    {
        if(
    mysql_store_result()) {
            new 
    myid mysql_fetch_int();
        }
        
    mysql_free_result();



    Однако, как вы заметили, в R7 нет функции mysql_fetch_int(); тут и возникает проблема.
    Приходится пользоваться добавленной в R7 функцией cache_get_field (если же у вас несколько строк, то - cache_get_row).
    Как будет выглядеть код:

    PHP код:
    mysql_query_callback(1"SELECT myid FROM players LIMIT 1""QueryCallback");

    forward QueryCallback(queryindexextraidconnectionHandle);
    public 
    QueryCallback(queryindexextraidconnectionHandle)
    {
        if(
    mysql_store_result()) {
            new var[
    10];
            
    cache_get_field(0, var); // 0 - ID первого столбца, var - переменная, куда записывать результат
            
    new myid strval(var);
        }
        
    mysql_free_result();



    Если вам нужно получить значение типа float и записать в переменную, то вместо strval используйте floatstr


    2. Ну и теперь к самим отправлениям запросов
    R6-ый вид проверки зарегистрирован игрок или нет, выглядит так:
    PHP код:
    public OnPlayerConnect(playerid)
    {
        new 
    query[75], name[MAX_PLAYER_NAME];
        
    GetPlayerName(playeridnamesizeof(name));
        
    mysql_format(1query"SELECT * FROM `users` WHERE `name`='%s'"name);
        if(
    mysql_query(query) && mysql_store_result())
        {
            if(
    mysql_num_rows()) { // зарегистрирован
                //действия
            
    }
            
            else { 
    // не зарегистрирован
                //действия
            
    }
        }
        
    mysql_free_result();
        return 
    1;



    В R7 нам придется создавать коллбек и пихать в него то, что следует после запроса. Все это выполнится в отедльном потоке и никак не повлияет на работоспособность сервера
    Вот так будет выглядеть:
    PHP код:
    public OnPlayerConnect(playerid)
    {
        new 
    query[75], name[MAX_PLAYER_NAME];
        
    GetPlayerName(playeridnamesizeof(name));
        
    mysql_format(1query"SELECT * FROM `users` WHERE `name`='%s'"name);
        
    mysql_query_callback(playeridquery"CheckPlayerRegistered"01);
        return 
    1;
    }

    forward CheckPlayerRegistered(queryindexextraidconnectionHandle);
    public 
    CheckPlayerRegistered(queryindexextraidconnectionHandle)
    {
        if(
    mysql_store_result())
        {
            if(
    mysql_num_rows()) { // зарегистрирован
                //действия
            
    }
            
            else { 
    // не зарегистрирован
                //действия
            
    }
        }
        
    mysql_free_result();



    Если у вас код, который надо пихать в коллбек в версии R6 был в коллбеке OnQueryFinish (его убрали), то удаляем из OnQueryFinish и вставляем в наш коллбек
    Хочу заметить, что ВСЕ действия из OnQueryFinish должны быть перенесены в ваш собственный коллбек, а OnQueryFinish - удален


    3. Еще мне хотелось бы повнимательнее рассмотреть параметры

    PHP код:
    mysql_query_callbackindexquery[], callback[], extraid = (-1), connectionHandle 1); 
    PHP код:
    ВашКоллбек(queryindexextraidconnectionHandle); 
    Чтобы иметь в собственном коллбеке доступ к переменным (например, playerid), вы должны передать их в качестве параметров функции mysql_query_callback - index (основной) и extraid (дополнительный). Если какой-то параметр передавать не надо, ставим -1.


    Если что-то не понятно, спрашиваем.

    P.S. Если заметили ошибку, пишите в этой теме

  2. #2
    Проверенный Аватар для frog163
    Регистрация
    12.04.2010
    Адрес
    Samara
    Возраст
    31
    Сообщений
    4,548
    Репутация: 365

    Звание: - очень-очень хороший человек

    Re: Перевод сервера с MySQL R6 на MySQL R7 (урок / помощь)

    Получение данных из ячейки
    одинаковый код, поправь
    Ничто не ограничивает полет мысли программиста так, как компилятор, сцуко!
    Если в предложении собеседника различного рода смайлов больше чем слов - однозначно, что этот индивид страдает критической, неизлечимой и при этом прогрессирующей формой долбоебизма © лурка
    PAWN Compiler делает то, что вы приказали ему сделать, а не то, что вы хотели, чтобы он сделал..

  3. #3
    Разработчик RP GameWorld Аватар для Splav
    Регистрация
    05.06.2010
    Адрес
    Нижний Новгород
    Возраст
    27
    Сообщений
    1,915
    Репутация: 190

    Звание: - весьма и весьма положительная личность

    Re: Перевод сервера с MySQL R6 на MySQL R7 (урок / помощь)

    Цитата Сообщение от frog163 Посмотреть сообщение
    одинаковый код, поправь
    Спасибо, исправлено

  4. #4
    кабанчик :3
    Регистрация
    20.01.2012
    Сообщений
    1,513
    Репутация: 231

    Звание: - весьма и весьма положительная личность

    Re: Перевод сервера с MySQL R6 на MySQL R7 (урок / помощь)

    спасибо,пригодиться

  5. #5
    Проверенный Аватар для Johurt
    Регистрация
    21.09.2010
    Адрес
    Lithuania, Klaipėda
    Возраст
    29
    Сообщений
    1,168
    Репутация: 38

    Звание: на пути к лучшему

    Re: Перевод сервера с MySQL R6 на MySQL R7 (урок / помощь)

    У меня вопрос. Я не очень понял, для каждой проверки нужен свой каллбэк? Вообще намудрили с этим r7...

  6. #6
    Активный пользователь Аватар для u.WiseAlex
    Регистрация
    10.07.2012
    Сообщений
    602
    Репутация: 24

    Звание: на пути к лучшему

    Re: Перевод сервера с MySQL R6 на MySQL R7 (урок / помощь)

    В чём разница между mysql_function_query и mysql_query_callback?

  7. #7
    Проверенный Аватар для e.kosovskij
    Регистрация
    09.07.2010
    Адрес
    Украина, Харьков
    Сообщений
    3,180
    Репутация: 308

    Звание: как роза среди колючек

    Re: Перевод сервера с MySQL R6 на MySQL R7 (урок / помощь)

    Цитата Сообщение от u.WiseAlex Посмотреть сообщение
    В чём разница между mysql_function_query и mysql_query_callback?
    Насколько мне известно в R7 убрали ф-цию mysql_query_callback и mysql_query, оставили только mysql_function_query.

    Хотя у меня почему-то и mysql_query используется. :O

  8. #8
    Активный пользователь Аватар для u.WiseAlex
    Регистрация
    10.07.2012
    Сообщений
    602
    Репутация: 24

    Звание: на пути к лучшему

    Re: Перевод сервера с MySQL R6 на MySQL R7 (урок / помощь)

    Цитата Сообщение от McLuhan Посмотреть сообщение
    Насколько мне известно в R7 убрали ф-цию mysql_query_callback и mysql_query, оставили только mysql_function_query.

    Хотя у меня почему-то и mysql_query используется. :O
    Функции не убрали, а mysql_query оставили как макрос. А в чём разница я понял...

  9. #9
    Активный пользователь Аватар для Gangster1
    Регистрация
    11.07.2010
    Адрес
    Kazan
    Сообщений
    680
    Репутация: 34

    Звание: на пути к лучшему

    Re: Перевод сервера с MySQL R6 на MySQL R7 (урок / помощь)

    У меня вопрос. Я не очень понял, для каждой проверки нужен свой каллбэк? Вообще намудрили с этим r7...
    На этот вопрос не дали ответа, а у меня такой же. Будьте добры объясните, как r7 юзать со sscanf т.к. он привычней и код выглядит более удобный. И вот ещё, пробовал юзать mysql_function_query без кэша, а он не работает в некоторых запросах.
    Помог! Ставь +

  10. #10
    Пользователь Аватар для Alison_Emmer
    Регистрация
    02.04.2012
    Адрес
    Казахстан, г.Шымкент
    Возраст
    28
    Сообщений
    56
    Репутация: -1

    Звание: имеет немного плохого в прошлом

    Re: Перевод сервера с MySQL R6 на MySQL R7 (урок / помощь)

    спс, пригодилось

Страница 1 из 2 12 ПоследняяПоследняя

Похожие темы

  1. Перевод сервера на Mysql
    от Prolife228 в разделе Заказы
    Ответов: 6
    Последнее сообщение: 07.02.2015, 18:00
  2. Вопрос про перевод с mysql r5 на mysql r7-8
    от hImIkAt в разделе Вопросы по скриптингу
    Ответов: 8
    Последнее сообщение: 23.10.2014, 15:01
  3. [Заказ]: Перевод сервера на MysQl R7
    от Mr.Proper в разделе Заказы
    Ответов: 11
    Последнее сообщение: 08.09.2013, 00:32
  4. [MySQL] Перевод сервера на MySQL
    от vanincheg в разделе Уроки MySQL
    Ответов: 146
    Последнее сообщение: 20.08.2012, 13:41
  5. [mysql] Перевод сервера.
    от WoudQ в разделе PHP, MySQL
    Ответов: 1
    Последнее сообщение: 17.11.2011, 19:04

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •