Показано с 1 по 5 из 5

Тема: Плагин MySQL - разбор функций

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

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

    Плагин MySQL - разбор функций

    Всем здравствуйте. На данном форуме много уроков по MySQL и по переводу мода на него, но нет урока, который бы описывал функции данного плагина. В официальном WIKI описание функций только на английском.

    Поэтому я решил написать урок, посвященный всем доступным функциям MySQL

    Ну для начала: по этой ссылке можно скачать плагин MySQL для сервера. Тут же есть и описание функций (на англ)
    Кстати, функции подходят только к плагину от BlueG (G-sTyLeZzZ)

    Итак, поехали...


    Функции плагина
    Примечание: Каждая функция (кроме mysql_connect и mysql_debug) имеет параметр connectionHandle - ID базы данных. Если вы подключены только к одной базе данных, то вам не нужно использовать данный параметр. Он всегда будет 1 по умолчанию

    1. mysql_debug

    С помощью данной функции можно включить / отключить запись всех действий с базой данных в лог (не рекомендую, если не требуется - может тормозить сервер)

    Синтаксис:
    PHP код:
    mysql_debug(enable); 
    enable: 0 - отключить, 1 - включить

    Пример использования (так, как его использую я):
    PHP код:
    format(strsizeof(str), "UPDATE contracts SET taken = 0 WHERE uID = %d"hittakecontract[playerid]);
    if(!
    mysql_query_callback(1str"YourCallback")) { mysql_debug(1); mysql_query_callback(1str"YourCallback"); mysql_debug(0); } // Запишет в дебаг, только если в запросе будет ошибка 
    Возвращает: ничего


    2. mysql_connect

    С помощью данной функции можно подключиться к Базе Данных
    Важное замечание: Не пытайтесь переподключиться к Базе Данных с помощью этой функции. Для этого используйте mysql_reconnect()

    Синтаксис:
    PHP код:
    mysql_connect(const host[], const user[], const database[], const password[], port); 
    const host[]: IP, на котором расположена База Данных
    const user[]: логин пользователя для доступа к Базе Данных
    const database[]: имя Базы Данных
    const password[]: пароль, для подключения к Базе Данных
    port: порт для подключения к Базе Данных (по умолчанию 3306)

    Пример использования:
    PHP код:
    public OnGameModeInit()
    {
        new 
    mysql mysql_connect("127.0.0.1","root","mydatabase","mypass"); // подключимся к Базе Данных
        // ...

    Возвращает: ID соединения (его нудно использовать в connectionHandle)


    4. mysql_ping

    Данная функция проверяет, если ли соединение с Базой Данных
    Важное замечание: проверка на состояние соединения (и рестарт, если нужно) происходят автоматически при использовании потоков

    Синтаксис:
    PHP код:
    mysql_ping(connectionHandle); 
    connectionHandle: ID соединения

    Пример использования:
    PHP код:
    if(mysql_ping() == 1) print("MySQL соединение установлено!");
    // ...
    if(mysql_ping() == -1) print("MySQL соединение прервано!"); 
    Возвращает: 1 - если соединение есть, -1 - если нет


    5. mysql_stat

    Данная функция получает статистику MySQL сервера

    Синтаксис:
    PHP код:
    mysql_stat(const destination[], connectionHandle); 
    const destination[]: строка, в которую необходимо записать полученный результат
    connectionHandle: ID соединения

    Пример использования:
    PHP код:
    new stats[150]; mysql_stat(stats); print(stats);
     
    //Выведет:
    Uptime380  Threads1  Questions3  Slow queries0  Opens12  Flush tables1  
    Open tables
    6  Queries per second avg0.008 
    Возвращает: ничего


    6. mysql_set_charset

    С помощью этой функции можно изменить кодировку симовлов в Базе Данных. Полезно для использования в БД символов, отличных от английских (например, кириллицу)

    Синтаксис:
    PHP код:
    mysql_set_charset(charset[],connectionHandle); 
    charset[]: необходимая кодировка
    connectionHandle: ID соединения

    Пример использования:
    PHP код:
    mysql_set_charset("utf8_unicode_ci"); 
    Возвращает: ничего


    7. mysql_get_charset

    С помощью этой функции можно узнать, какая сейчас кодировка установлена

    Синтаксис:
    PHP код:
    mysql_get_charset(destination[], connectionHandle); 
    destination[]: строка, в которую запишем текущую кодировку
    connectionHandle: ID соединения

    Пример использования:
    PHP код:
    new charset[20]; mysql_get_charset(charset); 
    Возвращает: ничего


    8. mysql_reconnect

    С помощью этой функции можно переподключиться к БД

    Синтаксис:
    PHP код:
    mysql_get_charset(connectionHandle); 
    connectionHandle: ID соединения

    Пример использования:
    PHP код:
    //Если соединение по какой-либо причине пропало
    mysql_reconnect(); 
    Возвращает: ничего


    9. mysql_reload

    С помощью этой функции можно попросить MySQL сервер перезагрузить таблицы пользовательских привилегий (сам не юзал)

    Синтаксис:
    PHP код:
    mysql_reload(connectionHandle); 
    connectionHandle: ID соединения

    Пример использования:
    PHP код:
    mysql_reload(); 
    Возвращает: ничего


    10. mysql_format

    С помощью этой функции можно попросить MySQL сервер перезагрузить таблицы пользовательских привилегий (сам не юзал)
    Важное замечание: функция добавлена в версии R6-2 плагина и не работает в более ранних версиях
    Замечание: такие спецификаторы как %2.f, %10.s еще не поддерживаются

    Синтаксис:
    PHP код:
    mysql_format(connectionHandleoutput[], format[], {Float,_}:...); 
    connectionHandle: ID соединения
    output[]: строка, в которую придется записать результат
    format[]: строка, которую нужно подготовить для запроса
    {Float,_}:...: тут аргументы

    Пример использования:
    PHP код:
    new szDestination[100];
    mysql_format(connectionHandleszDestination"SELECT * FROM `%s` WHERE `bar` = '%e' AND `foobar` = '%f' LIMIT %d""foobar""escape'me\"please"1.23451337);
    mysql_query_callback(1szDestination"YourCallback"); 
    Дополнения:
    Эту функцию можно использовать (и надо использовать) вместо простого format, если вы хотите отправить этот запрос к БД, т.к. она автоматически проверяет запрос на запрещенные символы, которыми можно вызвать SQL инъекцию и заменяет их не безопасные

    Доступные спецификаторы:

    %s - обычная строка (опасные символы не трогаются)
    %e - строка, которую необходимо почистить от возможной SQL инъекции (в этом и есть вся разница с format
    %d - целое число (ну это и так понятно...)
    %f - вещественный тип (дробь)
    %i - число

    Возвращает: ничего


    11. mysql_query_callback

    В R7 - главная функция. Служит для отправки запроса к Базе Данных. Причем выполнение запроса будет происходить в отдельном потоке

    Синтаксис:
    PHP код:
    mysql_query_callback(indexquery[], callback[], extraidconnectionHandle); 
    index: переменная, которую вы хотите передать для использования в потоке
    query[]: запрос, который необходимо отправить к Базе Данных
    callback[]: название потока (паблика)
    extraid: (дополнительный) переменная, которую вы хотите передать в поток
    connectionHandle: ID соединения

    Замечание: так как создается новый public, не забудьте добавить к нему forward

    Пример использования:
    PHP код:
    forward MySqlCallback(query[], indexextraidconnectionHandle);
     
    public 
    OnPlayerConnect(playerid)
    {
        
    mysql_query_callback(playerid,"SELECT * FROM `mybuildings`","MySqlCallback");
    }
     
    public 
    MySqlCallback(query[], indexextraidconnectionHandle)
    {
        
    //Query processed, you can execute your code now

    Возвращает: 1 - если запрос отправлен, 0 - если произошла ошибка


    13. mysql_store_result

    Всегда используйте эту функцию после отправки запросов SELECT, SHOW, DESCRIBE, EXPLAIN, CHECK TABLE. Иначе будут создавать пробки
    Замечание: Функция используется для сохранения результата запроса для последующей обработки. Не забывайте очищать данные, когда они больше не нужны - mysql_free_result().

    Синтаксис:
    PHP код:
    mysql_store_result(connectionHandle); 
    connectionHandle: ID соединения

    Пример использования:
    PHP код:
    mysql_query_callback(1"SELECT * FROM `players` WHERE name='iamcool'""FindPlayer");
    mysql_store_result();
    //...
    mysql_free_result(); 
    Возвращает: 1 - если сохранено, 0 - если произошла ошибка


    14. mysql_free_result

    Функция используется для очистки результата после использования mysql_store_result

    Синтаксис:
    PHP код:
    mysql_free_result(connectionHandle); 
    connectionHandle: ID соединения

    Пример использования:
    PHP код:
    mysql_query_callback(1"SELECT * FROM `players` WHERE name='iamcool'""FindPlayer");
    mysql_store_result();
    //...
    mysql_free_result(); 
    Возвращает: ничего


    15. mysql_real_escape_string

    Данная функция проверяет строку на символы, которые могут вызвать SQL инъекцию и отключа Например, \x00, \n, \r, \, ', " и \x1a.
    Важное замечание: Всегда используйте эту фунцкию (если не используете mysql_format), если хотите отправить запрос с данными полученными от игрока. Во избежание SQL инъекции

    Синтаксис:
    PHP код:
    mysql_real_escape_string(const source[], destination[], connectionHandle); 
    const source[]: первоначальная строка
    destination[]: строка, в которую записать безопасную строку
    connectionHandle: ID соединения

    Замечание: Перед использованием этой функции необходимо, чтобы соединение с БД было установлено.
    Замечание: Символы % и _ не блокируются, т.к. используются в некоторых запросах.

    Пример использования:
    PHP код:
    public OnPlayerText(playerdtext[])
    {
        new 
    escape[140];
        
    mysql_real_escape_string(text,escape); // строка теперь безопасна
        // ...

    Возвращает: кол-во найденных и нейтрализованных вредоносных символов


    16. mysql_errno

    Функция получает код ошибки предыдущей MySQL операции

    Синтаксис:
    PHP код:
    mysql_errno(connectionHandle); 
    connectionHandle: ID соединения

    Пример использования:
    PHP код:
    mysql_query_callback(1"SELECT * FROM `mytable`""MyQuery");
    if(
    mysql_errno() == 0) print("Запрос отправлен без ошибок!"); 
    Возвращает: код ошибки, 0 - если ошибок нет


    17. mysql_warning_count

    Функция получает кол-во ошибок / предупреждений из предыдущего запроса

    Синтаксис:
    PHP код:
    mysql_warning_count(connectionHandle); 
    connectionHandle: ID соединения

    Пример использования:
    PHP код:
    mysql_query_callback(1"UPDATE `notable` SET something=2 WHERE nofield=0""MyQuery");
    if(
    mysql_warning_count()) print("Предупреждения обнаружены!"); 
    Возвращает: код кол-во предупреждений, 0 - если их нет


    18. mysql_affected_rows

    Функция получает кол-во строк работа с которыми совершилась через запросы INSERT, UPDATE, REPLACE или DELETE

    Синтаксис:
    PHP код:
    mysql_affected_rows(connectionHandle); 
    connectionHandle: ID соединения

    Замечание: Если последний запрос был DELETE, но без WHERE - все строки из данной таблицы будут удалены, но это функция вернет 0.

    Пример использования:
    PHP код:
    mysql_query_callback(1"DELETE FROM mylogs WHERE log_id > 10""DeleteQuery");
    printf("%d логов удалено!",mysql_affected_rows()); 
    Возвращает: кол-во строк


    19. mysql_num_rows

    Функция получает кол-во строк, полученных в результате выполнения запросов SELECT и SHOW (схожа с mysql_affected_rows)

    Синтаксис:
    PHP код:
    mysql_num_rows(connectionHandle); 
    connectionHandle: ID соединения

    Пример использования:
    PHP код:
    mysql_query_callback(1"SELECT NULL FROM table1""Select");
    mysql_store_result(); 
    new 
    rows mysql_num_rows(); 
    mysql_free_result();
    printf("В таблице %d строк",rows); 
    Возвращает: кол-во строк


    20. mysql_num_fields

    Функция получает кол-во столбцов в результате запроса

    Синтаксис:
    PHP код:
    mysql_num_fields(connectionHandle); 
    connectionHandle: ID соединения

    Пример использования:
    PHP код:
    mysql_query_callback(1"SELECT field1,field2,field3 FROM table2""Query");
    mysql_store_result();
    printf("%d столбцов выбрано.",mysql_num_fields());
     
    mysql_free_result(); 
    Возвращает: кол-во столбцов


    21. mysql_insert_id

    Функция получает ID сгенерированный благодаря AUTO_INCREMENT в предыдущем INSERT запросе

    Синтаксис:
    PHP код:
    mysql_insert_id(connectionHandle); 
    connectionHandle: ID соединения

    Пример использования:
    PHP код:
    mysql_query_callback(1"INSERT INTO `players` (name,password) VALUES ('Ownage',MD5('mypass')""Query");
    printf("ID зарегистрированного игрока: %d",mysql_insert_id()); 
    Возвращает: число вставленное в таблицу, как AUTO_INCREMENT


    22. mysql_field_count

    Функция получает кол-во столбцов в самом последнем запросе

    Синтаксис:
    PHP код:
    mysql_field_count(connectionHandle); 
    connectionHandle: ID соединения

    Пример использования:
    PHP код:
    mysql_query_callback(1"SELECT * FROM mytable""Query");
    mysql_store_result();
     
    printf("В результате запроса %d столбцов.",mysql_field_count());
     
    mysql_free_result(); 
    Возвращает: число столбцов


    23. mysql_fetch_row_format

    Функция служит для обработки полной строки из результата запроса

    Замечание: Если запросом получено несколько строк, то данная функция после обработки текущей строки перейдет на следующую.
    Замечание: Есть еще одна функция (точнее макрос) - mysql_fetch_row. В нем в отличии от данной функции используется разделитель по умолчанию - '|'

    Синтаксис:
    PHP код:
    mysql_fetch_row_format(string[], const delimiter[], connectionHandle); 
    string[]: строка, в которую необходимо записать полученный результат
    const delimiter[]: разделитель, которым будут разделяться значения из разных столбцов (| по умолчанию). Если не используется, то смело используйте mysql_fetch_row
    connectionHandle: ID соединения

    Пример использования:
    PHP код:
    mysql_query_callback(1"SELECT * FROM players WHERE name='Myname'""Query");
    mysql_store_result(); new resultline[200];
     
    if(
    mysql_fetch_row_format(resultline))
    {
        
    //Для разделения можете использовать - sscanf, split, strtok или любой другой способ. Я использую sscanf
        
    sscanf(resultline,"p<|>dds",PlayerInfo[playerid][pLevel],PlayerInfo[playerid][pAdmin],PlayerInfo[playerid][pRandomString]);
    }
    else 
    SendClientMessage(playerid,0xFFFFFF,"В базе данных нет!");
     
    mysql_free_result(); 
    Возвращает: 1 - при обработке, 0 - если нет строк для обработки


    24. mysql_retrieve_row

    Функция служит для перехода на следующую строку.

    Замечание: Помните, что mysql_fetch_row_format автоматически переводит на следующую строку (будьте внимательны)
    Замечание: Есть еще одна функция (точнее макрос) - mysql_next_row. Она полностью дублирует данную

    Синтаксис:
    PHP код:
    mysql_retrieve_row(connectionHandle); 
    connectionHandle: ID соединения

    Пример использования:
    PHP код:
    mysql_query_callback(1"SELECT * FROM houses""Query");
    mysql_ store_result();
    while(
    mysql_retrieve_row()) //будет идти пока не достигнет последней строки
    {
        
    //Можете использовать mysql_fetch_field и mysql_fetch_field_row тут
    }
    mysql_free_result(); 
    Возвращает: 1 - если строка сменилась, 0 - если больше нет строк


    25. mysql_fetch_field

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

    Синтаксис:
    PHP код:
    mysql_fetch_field(numberdest[], connectionHandle); 
    number: номер столбца
    dest[]: строка, в которую нужно записать название столбца
    connectionHandle: ID соединения

    Важное замечание: Если вы укажите неверный номер столбца, плагин крешнется
    Замечание: Номер первого столбца - 0


    Пример использования:
    PHP код:
    if(mysql_retrieve_row())
    {
        new 
    field[20];
        for(new 
    inum mysql_num_fields(); numi++)
        {
            
    mysql_fetch_field(i,field); //Получит имя всех столбцов
        
    }

    Возвращает: ничего


    26. mysql_fetch_field_row

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

    Замечание: Есть еще одна функция (точнее макрос) - mysql_get_field

    Синтаксис:
    PHP код:
    mysql_fetch_field_row(string[], const fieldname[], connectionHandle);
    mysql_get_field(const fieldname[], string[], connectionHandle); // макрос 
    string[]: строка куда будет помещен результат из столбца
    const fieldname[]: имя столбца, из которого будем брать данные
    connectionHandle: ID соединения


    Пример использования:
    PHP код:
    if(mysql_retrieve_row())
    {
        new 
    result[50];
        
    mysql_fetch_field_row(result,"username");
        
    //или макрос:
        
    mysql_get_field("username",result);

    Возвращает: ничего

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

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

    Re: Плагин MySQL - разбор функций

    Коллбеки плагина

    1. OnQueryError

    Данный коллбек вызывается, когда происходит ошибка при отправлении запроса

    Параметры:
    PHP код:
    public OnQueryError(erroriderror[], callback[], query[], connectionHandle
    errorid - ID ошибки
    error[] - название ошибки
    callback[] - название коллбека, в котором произошла ошибка
    query[] - отправленный запрос
    connectionHandle - ID соединения

    Пример:

    PHP код:
    public OnQueryError(erroriderror[], callback[], query[], connectionHandle)
    {
        switch(
    errorid)
        {
            case 
    CR_COMMAND_OUT_OF_SYNC:
            {
                
    printf("Commands out of sync for thread ID: %d",resultid);
            }
            case 
    ER_SYNTAX_ERROR:
            {
                
    printf("Something is wrong in your syntax, query: %s",query);
            }
        }
        return 
    1;




    P.S. Если допустил ошибки, неточности, поправьте меня

  3. #3
    ыыыыы Аватар для Mexanizm
    Регистрация
    16.01.2012
    Адрес
    Россия. Воронеж
    Возраст
    30
    Сообщений
    2,450
    Репутация: 287

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

    Re: Плагин MySQL - разбор функций

    Классный урок.Автор молодец ).Скинь пожалуйста ссылку на плагин mysql для линукса (хостинг)

  4. #4
    Почетный пользователь LC Аватар для Snoowker
    Регистрация
    06.04.2010
    Адрес
    Kyiv
    Возраст
    28
    Сообщений
    1,952
    Репутация: 279

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

    Re: Плагин MySQL - разбор функций

    PHP код:
    if(!mysql_query(str)) { mysql_debug(1); mysql_query(str); mysql_debug(0); } 
    Ай молодец, как и учил. :3

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

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

    Re: Плагин MySQL - разбор функций

    Цитата Сообщение от Snoowker Посмотреть сообщение
    PHP код:
    if(!mysql_query(str)) { mysql_debug(1); mysql_query(str); mysql_debug(0); } 
    Ай молодец, как и учил. :3
    Спасибо


    Автор урока я, то бишь переводил.
    Оригинал: http://wiki.sa-mp.com/wiki/MySQL


    Свежую версию плагина (в том числе для Linux) можно скачать тут: http://forum.sa-mp.com/showthread.php?t=56564

Похожие темы

  1. Не работает плагин MySQL R8
    от underwoker в разделе Вопросы по скриптингу
    Ответов: 4
    Последнее сообщение: 14.04.2014, 06:37
  2. [Tool/WEB/Other] UCP на MySQL с множеством функций и админкой
    от vladeepslav в разделе UCP и прочее
    Ответов: 52
    Последнее сообщение: 03.01.2014, 19:01
  3. Ищу MySQL r5 static плагин
    от DniweRak228 в разделе Вопросы по скриптингу
    Ответов: 3
    Последнее сообщение: 04.09.2013, 10:35
  4. [Ищу] Плагин mysql.so
    от Westwood в разделе Ищу скрипт/мод/функцию/программу/плагин...
    Ответов: 0
    Последнее сообщение: 10.07.2013, 22:48
  5. плагин mysql
    от skorpion228 в разделе Вопросы по скриптингу
    Ответов: 3
    Последнее сообщение: 16.05.2013, 11:31

Ваши права

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