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. Поздравляю!
Если где-то допустил ошибку то сообщите, все таки по привычке уже писать уроки в ночь когда делать нечего .
И помните, программирование интересней чем вам кажется!
Универсальный 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 ( ![Ссылка на цитируемый текст](http://s95.ucoz.net/img/fr/ic/4/lastpost.gif) ) Причём тут вообще 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
У ТЕБЯ ЕСТЬ ИДЕЯ ДЛЯ ПРОГРАММЫ, НО САМ ТЫ НЕ МОЖЕШЬ НАПИСАТЬ КОД? ПИШИ МНЕ
|
|
|
|