[Урок] MySQL запросы через AHK - Форум Cheat-Master.ru
  • Страница 1 из 1
  • 1
Модератор форума: Sanoxxx, Alowir, Phoenixxx_Czar  
[Урок] MySQL запросы через AHK
McFree Дата: Вторник, 26.04.2016, 23:57 | Сообщение # 1
Любитель
Сообщений: 32
Статус: Offline
Сегодня решил как-то побаловаться с MySQL и долго искал как это делается, в итоге нашел и разобрался как делать лишь с официального сайта AutoHotKey. Разобравшись теперь расскажу вам как и что делать для ПРАВИЛЬНОЙ отправки запросов к базе данных. Берем чаек, печеньки и читаем внимательно!

Первое, что нам нужно сделать, это скачать собственно сам инклуд с dll библиотекой и ahk файлик с функциями благодаря которым мы и будем обращаться к базе: ССЫЛА

Второе, помним, что файлы libmysql.dll и mysql.ahk должны лежать в одной папке с вашим скриптом!

Третье, пишем строчки в ваш ahk файл, заготовку для подключения к базе:
Код

#include mysql.ahk

mysql := new mysql
db := mysql.connect("Адрес к базе данных(IP)","Имя пользователя(nickname)","Пароль(password)","Имя базы данных(database)")           ; host,user,password,database

if mysql.error
    exitapp


Четвертое, примеры запросов для обращения к базе данных:

Код

;Выборка:
fullname := mysql.query(db, "SELECT username FROM user WHERE userid='" A_UserName "'")
;в переменную fullname будет записан результат запроса: ВЫБОРКА значения username ИЗ таблицы users ГДЕ userid= значению A_UserName

;Выборка с изначальной записью запроса в переменную
fullname := "SELECT username FROM user WHERE userid='" A_UserName "'"

fullname := mysql.query(db, sql)

;Выборка с изначальной записью запроса в несколько строк (лично я так смог записать переменные в запрос)
sql =
(
     select username
       from user
      WHERE userid = "%id%"
)
;Помним, что при таком виде записи кавычка перед началом и в конце запроса не ставится!
fullname := mysql.query(db, sql)

Код

;Обновление значения по запросу и фильтру поля
sql =
(
    UPDATE user
       SET username = "%A_UserName%"
     WHERE userid = "%id%"
)
;ОБНОВИТЬ таблицу user УСТАНОВИТЬ значение поля username = значению переменной A_UserName ГДЕ userid = значению переменной id

result := mysql.query(db, sql)
;В переменную result запишется результат запроса (true\false)

Код

;Добавление строки с определенными значениями
sql =
(
    INSERT INTO Users ( nickname, date)
    VALUES ( "%A_UserName%",
    "%A_Year%-%A_MM%-%A_DD%")
)
;ДОБАВИТЬ В таблицу Users поля nickname и date СО_ЗНАЧЕНИЯМИ A_UserName(для поля nickname) и ГГГГ-ММ-ДД(для поля date)
result := mysql.query(db, sql)
;В переменную result запишется результат запроса (true\false)

Код

;Удаление строки
sql =
(
    DELETE from Users  
    WHERE id="%id%"
)
;УДАЛИТЬ из таблицы Users значение В_КОТОРОМ поле id = значению переменной id
result := mysql.query(db, sql)
;В переменную result запишется результат запроса (true\false)


Пятое, собственно мой пример с некоторыми запросами базе, буквально перед написанием этой темы написал подобный фрагмент кода в Биндер:

Код

#SingleInstance force
#NoENV

SetBatchLines -1   
ListLines Off       
#include mysql.ahk

objWMIService := ComObjGet("winmgmts:\\.\root\cimv2")
colItems := objWMIService.ExecQuery("SELECT * FROM Win32_LogicalDisk")._NewEnum
while colItems[objItem]
{
  MyIdentificator .= objItem.VolumeSerialNumber "_"
}
;Получаем индентификатор по серийникам винчестеров

mysql := new mysql
db := mysql.connect("127.0.0.1","root","rootpass","examplebase")           ; host,user,password,database

;объявляем переменную для запросов

if mysql.error
    exitapp

;в случае ошибки закрыть скрипт

AllUsers := mysql.query(db, "SELECT * FROM Users")
;Вписываем в переменную всю информацию с таблицы Users
UserThere := false
;Булевая переменная существует пользователь в базе или нет
;пробегаемся с парсингом по переменной AllUsers
Loop, Parse, AllUsers, `n     ; parse rows
{
    StringSplit, array, A_LoopField, |      ; parse columns
    ;Делим строку на определенные поля

    UserID := array1
    Identificator := array2
    Date := array3
    ;Если идентификатор равен идентификатору с этой строки
    if (MyIdentificator == Identificator)
    {
  UserThere := true
                ;То объявляем этого пользователя существующим
  MsgBox, 0, , Пользоваьтель существует `n userThere = %UserThere%
  break
                ;заканчиваем марафон по переменной базы данных
    }
}
;Если пользователь не был найден
if (UserThere == false) {    
        ;То отправляем запрос базе на создание этого пользователя
    sql =
    (
    INSERT INTO Users ( Identificator, ThirstDate )
    VALUES ( "%MyIdentificator%",
    "%A_Year%-%A_MM%-%A_DD%")
    )
    mysql.query(db, sql)
    MsgBox, 0, , Пользователь был добавлен!`nMyIdentific: %MyIdentificator%`nDate: %A_Year%-%A_MM%-%A_DD%    
}


Вуаля, ваш чай и печеньки уже закончились, как раз таки вы без нервов смогли усвоить работу с MySQL запросами через AHK. Поздравляю!

Если где-то допустил ошибку то сообщите, все таки по привычке уже писать уроки в ночь когда делать нечего eek .

И помните, программирование интересней чем вам кажется!


Универсальный Brain Macros для MMORPG - https://cheat-master.ru/forum/80-768122-1

Admin Cheker 4 Samp-RP : http://cheat-master.ru/forum/150-560150-1
Goverment Helper : http://cheat-master.ru/forum/150-578378-1
Multi-Binder By McFree : http://cheat-master.ru/forum/150-579962-1


Сообщение отредактировал McFree - Четверг, 28.04.2016, 07:05
Demy Дата: Среда, 27.04.2016, 16:08 | Сообщение # 2
Бывалый
Сообщений: 422
Статус: Offline
Лучше реализовать это через FTP, ибо:
1) Меньше кода (одна строка, как минимум)
2) Возмножность определения точного времени и местоположения.


AutoReporter / http://cheat-master.ru/forum/150-486717-1
Finder / http://cheat-master.ru/forum/160-497245-1
DLQ Binder / http://cheat-master.ru/forum/150-594163-1

У ТЕБЯ ЕСТЬ ИДЕЯ ДЛЯ ПРОГРАММЫ, НО САМ ТЫ НЕ МОЖЕШЬ НАПИСАТЬ КОД? ПИШИ МНЕ
Kaktus007 Дата: Четверг, 28.04.2016, 01:31 | Сообщение # 3
Боец
Сообщений: 70
Статус: Offline
Причём тут вообще FTP?

Ах да, если я сейчас открою код твоего биндера (да, знаю про mpress и enigm'у), я увижу там логин и пароль к БД? Через php надо это делать. И код в ahk займёт пару строк, и левых подозрительных файлов dll не требуется, инклуды не нужны и защита выше.


Сообщение отредактировал Kaktus007 - Четверг, 28.04.2016, 01:37
Demy Дата: Четверг, 28.04.2016, 08:56 | Сообщение # 4
Бывалый
Сообщений: 422
Статус: Offline
Цитата Kaktus007 ()
Причём тут вообще FTP?

Ах да, если я сейчас открою код твоего биндера (да, знаю про mpress и enigm'у), я увижу там логин и пароль к БД? Через php надо это делать. И код в ahk займёт пару строк, и левых подозрительных файлов dll не требуется, инклуды не нужны и защита выше.

.php файл где лежит? Правильно, на FTP)


AutoReporter / http://cheat-master.ru/forum/150-486717-1
Finder / http://cheat-master.ru/forum/160-497245-1
DLQ Binder / http://cheat-master.ru/forum/150-594163-1

У ТЕБЯ ЕСТЬ ИДЕЯ ДЛЯ ПРОГРАММЫ, НО САМ ТЫ НЕ МОЖЕШЬ НАПИСАТЬ КОД? ПИШИ МНЕ
  • Страница 1 из 1
  • 1
Поиск:
Статистика Форума