Mod Подключаем MySql

Автор темы #1
Дата рег
4 Фев 2013
Сообщения
76
Симпатии
19
Это небольшая библиотека позволяющая использовать базу данных MySql.
К ней прилогается скрипт содержащий основную функцию для работы с БД и несколько примеров по созданию запросов в БД.

Библиотека написана и протестирована с сервером MySql версии 5.1.53
Собрана была не помну на какой ревизии но версия сервера 0504-EB.
В архиве есть папка с исходником библиотеки.

Инструкция по установке
Копируем все три файла в папку ..\server\scripts
Файл библиотеку libmySQL.dll кпируем так-же и в папку ..\\server (если у вас на этой машине не установлен MySql)
Регистрируем MySqlConnect.fos в scripts.cfg
Теперь можно начинать работать. :)

Внимание!
При создании таблици а так-же при написании скрипта, используйте кодировку cp1251 (cp1251_general_ci), в редакторах обычно это ANSI.
 

Вложения

Дата рег
22 Окт 2012
Сообщения
119
Симпатии
63
для чего тут windows.h? я не вижу ни одного использования к тому же это же убивает кроссплатформенность кода на корню
почему тут так много левого кода и левых комментов?
 
Автор темы #4
Дата рег
4 Фев 2013
Сообщения
76
Симпатии
19
Именно поэтому я выложил исходники. Я сам не волшебник а только учус. )) Спасибо, что подсказал. Завтра исправлю и выложу новую версию. Если будут ещё замечания, буду рад.

P.S.
Windows.h там остался случайно. Я просто сначала тестил код на консоли. а уже потом делал библиотеку.
 
Автор темы #5
Дата рег
4 Фев 2013
Сообщения
76
Симпатии
19
Архив перезалил. Убрал из библиотеки лишний мусор. От windows.h избавиться не получилось. Оказалось, что я не просто так его оставил. Он нужен для компиляции libmaysql.h и без него один из заголовков подключеных в этом файле выдаёт кучу ошибок. пока-что кросплатформеной замены ему я ненашёл. Если найду то выложу новый вариант.
 
Автор темы #7
Дата рег
4 Фев 2013
Сообщения
76
Симпатии
19
В том то и дело, что я не собирал MySql. Я установил MySql и MySQL Connector C++ 1.1.2 и написал небольшую dll использую библиотеки MySql и MySql Connector - а. Что такое #ifdef я сам понял из кода fonline.h.
Но выбрать все нужное для сборки из fonline_tla.h и fonline.h и избавиться от них мне довольно трудно. Потом я собрал её в таком виде и она нормально работает. А вылизать её доконца можно, но тут мне нехватает некоторых знаний.
 
Дата рег
22 Окт 2012
Сообщения
119
Симпатии
63
ты меня верно не правильно понял
некоторые компиляторы не поддерживают автолинковку через pragma comment например всеми любимый gcc/g++ который используется повсеместно для этих целей использует параметр -l так что используй ifdef для альтернативного варианта

для фонлайна это не критично тк нормально работает только виндовский сервер но на будущие стоит учесть
 
Дата рег
15 Окт 2011
Сообщения
0
Симпатии
0
Так когда будет рабочий вариант для СДК, чтобы каждый смог сделать нормальный безвайповый сервер со своим блекджэком и девушками вольного поведения?
 
Автор темы #11
Дата рег
4 Фев 2013
Сообщения
76
Симпатии
19
Это уже нормальный готовый вариант. Он просто не кросплатформеный. Тоесть Если у тебя сервер фонлайна работает на linux, то библиотеку эту туда подключить будет сложнее.

P.S.
Если даже будут какие-либо улечшения и апдейты, вайп делать не придеться и даже код менять ненужно будет. Просто надо будет скачать новую версию MySqlConnect.dll и вставить в папку с заменой старой. В этом и заключаеття суть библиотеки, что её обновление не требует изменения кода программы.
 
Автор темы #12
Дата рег
4 Фев 2013
Сообщения
76
Симпатии
19
ВНИМАНИЕ!!!
Перезалил архив. Изменены dll и скрипт. Изменил кодировку на cp1251 в связи с тем, что фонлайн не воспринимает нармально utf-8 на русском языке.
 
Дата рег
21 Мар 2013
Сообщения
5
Симпатии
0
А как у нас данные сохраняются? Также как в чистом TLA?
 
Дата рег
17 Сен 2014
Сообщения
133
Симпатии
18
Такой вопросик. Говорят на ТЛА начали использовать библиотеку, а потом выпилили. Кто-нибудь обладает информацией о причинах? Просто не прижилась - это одно, а если глючит/уязвима - совсем другое.
 
Дата рег
5 Ноя 2011
Сообщения
118
Симпатии
40
Конкретно про эту сборку сказать не могу, но вообще mysql connector очень долгое время использовался на 2238 и присутствует в sdk 2238, я тоже в использовании mysql никаких проблем не замечал.
Можно собрать свой коннектор хоть со свежей либой mariaDB, хоть PostgreSQL и тд. Корректность работы зависит только от вашего кода.
 
Дата рег
2 Апр 2011
Сообщения
239
Симпатии
57
Так сложилось исторически. Отказались от этого ещё до ОБТ3, если я верно помню.
 
Дата рег
22 Мар 2014
Сообщения
166
Симпатии
17
У меня с cp1251 в обще не хотела работать! Делал как написано)
В итоге поменял везде на utf8_general_ci. Только тогда все стало на родном Русском)
Использую Notepad++ 6.9.2

Пробовал выбирать:
1) Кодировку Ansi
2) Преобразовывать в Ansi
3) Кодировка- windows 1251
-и другие.... Никак не работало! Кракозябли)

Проверял:
1) Базу данных - кодировку
2) Таблицу - кодировку
3) Файл - кодировку

Везде поменял на utf8 - сразу заработало и запись в базу и чтение прошли успешно в игре
 
Последнее редактирование:
Дата рег
22 Мар 2014
Сообщения
166
Симпатии
17
А в базе нельзя посмотреть - все закодировано и на cp1251 и на utf

Через Hex редактор даже менял в MySqlConnect.dll cp1251 на utf, захожу в игру и как мне показалось - стали другие иероглифы в программе базе, а в игре также вcе работает

Короче одна проблема осталась - это иероглифы в базе.
Я даже и на cp1251 смог сделать, чтобы были иероглифы в базе, а в игре все нормально.


***Смотрю состояние базы через консоль и через Workbench
 
Дата рег
22 Мар 2014
Сообщения
166
Симпатии
17
Проблема решена. Смог самостоятельно собрать библиотеку из cpp, везде проставив UTF8 и использую библиотеку mariadb_client-1.0.0-win32
Оставлю кому надо
mariadb-native-client - download
MySqlConnect.cpp для mariadb client - download
 
Последнее редактирование:
Дата рег
22 Мар 2014
Сообщения
166
Симпатии
17
Также забыл сказать - забыли упомянуть про mysql_close(conn); - т.к сервер не закрывает подключения к MySQL и в результате этого выходит ошибка превышения кол-ва подключений!(Mysql error 1040: Too many connections)
Что приводит к остановке базы


Также в самом скрипте, где нужно создавать запросы к базе, то пригодится:
Код:
for( uint i = 0, j = query2.length(); i < j; i++ )
if( query2[ i ] == " " ) query2[ i ] = "";
Это удаление пробела. Т.к оне мешает использовать StrToInt
 
Последнее редактирование:
Дата рег
30 Янв 2015
Сообщения
169
Симпатии
1
Проблема решена. Смог самостоятельно собрать библиотеку из cpp, везде проставив UTF8 и использую библиотеку mariadb_client-1.0.0-win32
Оставлю кому надо
mariadb-native-client - download
MySqlConnect.cpp для mariadb client - download
А в чём вы создаёте dll? Я использовал Microsoft Visual Studio 2010 создавал проект С++, но у меня постоянно ошибки при компиляции
Вот шапка кода. Видимо я делаю что-то не так
Код:
#include "G:/Game/Server/scripts/fonline_tla.h"
#include "Windows.h"
#include "C:/Program Files/MariaDB 5.5/include/mysql/mysql.h"
#pragma comment (lib, "C:/Program Files/MariaDB 5.5/lib/libmysql.lib")
 
// Extern data definition
//_GlobalVars GlobalVars;
 
// Entry point
FONLINE_DLL_ENTRY( isCompiler )
{
	if( isCompiler )
		return;
 
	// Test Memory Level 3 for loaded DLLs
	for( uint i = 0; i < 666; i++ )
		volatile char* leak = new char[ 2 ];
}
Как правильно компилировать подскажите новичку в этом деле?
А лучше скинте проект, чтоб я на примере посмотрел
 
Последнее редактирование:
Дата рег
30 Янв 2015
Сообщения
169
Симпатии
1
Всё, разобрался. Ошибка разработчиков. Microsoft Visual Studio 2010 не работает .NET 4.5.
В Microsoft Visual Studio 2008 всё работает на ура
 
Дата рег
22 Мар 2014
Сообщения
166
Симпатии
17
у меня 2010
Код:
@echo off
@: Environment
@set PATH=C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE;%PATH%
@set PATH=C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\BIN;%PATH%
@set LIB=C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\LIB;%LIB%
@set LIB=C:\Program Files (x86)\Microsoft SDKs\Windows\v6.0A\Lib;%LIB%
@set LIB=C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Lib;%LIB%
@set LIB=.\StlPort;%LIB%
@set INCLUDE=C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include;%INCLUDE%
@set INCLUDE=.\StlPort;%INCLUDE%
@set INCLUDE=C:\Program Files (x86)\Windows Kits\8.1\Include\shared;%INCLUDE%
@set INCLUDE=C:\Program Files (x86)\Windows Kits\8.0\Include\shared;%INCLUDE%
@set INCLUDE=C:\Program Files (x86)\Windows Kits\8.1\Include\um;%INCLUDE%
@set INCLUDE=C:\Program Files\MySQL\MySQL Server 5.1\include;%INCLUDE%
 
@set INCLUDE=C:\Program Files\MySQL\Connector.C++ 1.1\include\cppconn;%INCLUDE%
@set INCLUDE=C:\Program Files\MySQL\Connector.C++ 1.1\include;%INCLUDE%
 
@set LIB=C:\Program Files\MySQL\Connector.C++ 1.1\lib\opt;%LIB%
 
@set INCLUDE=C:\Program Files\MySQL\MySQL Connector.C 6.1\include;%INCLUDE%
 
@set LIB=C:\Program Files\MySQL\MySQL Connector.C 6.1\lib;%LIB%
 
 
 
@: Server
@del "./MySqlConnect.dll"
cl.exe /nologo /MT /W3 /O2 /Gd /D "__SERVER" /Fo"./MySqlConnect.obj" /FD /c "./MySqlConnect.cpp"
link.exe /nologo /dll /incremental:no /machine:I386 "./MySqlConnect.obj" /out:"./MySqlConnect.dll"
 
@pause
 
Дата рег
17 Сен 2014
Сообщения
133
Симпатии
18
В общем, такая шляпа - после отправления запроса к БД сервер ждёт от неё ответа. Следовательно если БД обрабатывает много данных - сервер всё это время висит, что довольно ощутимо при больших объёмах. Можно как-то выпилить ожидание ответа? Отправил и забыл, а что там с ним БД будет делать, дело десятое.
 
Дата рег
19 Фев 2011
Сообщения
197
Симпатии
72
В общем, такая шляпа - после отправления запроса к БД сервер ждёт от неё ответа. Следовательно если БД обрабатывает много данных - сервер всё это время висит, что довольно ощутимо при больших объёмах. Можно как-то выпилить ожидание ответа? Отправил и забыл, а что там с ним БД будет делать, дело десятое.
Делать отдельным процессом?
 
Дата рег
17 Сен 2014
Сообщения
133
Симпатии
18
Как конкретно это сделать? Мой лвл еще слабоват для dll.