Mysql, win32 - API 2 | Самая распространённая база данных |
Здравствуйте, гость ( Вход | Регистрация )
Mysql, win32 - API 2 | Самая распространённая база данных |
9.3.2009, 19:37
Сообщение
#21
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
DLL библиотека для работы с базой данных MySQL 5.
Версия lua: 5.1 Версия API: 2 Разрядность ОС: 32 Протестировано на PtokaX 0.4.1.1 Копирайт: Copyright © 2003-2007 Kepler Project LuaSQL is a simple interface from Lua to a DBMS Версия: LuaSQL 2.1.1 В связи с непонятной работой sqlite предлагаю перейти на стабильную и отчасти более функциональную базу данных. Хоть преимуществом sqlite и является работа на локальном компьютере и легкая переносимость, однако весь мир использует mysql и надо отдать должное - mysql великолепен! Теперь о содержимом библиотеки. Я прикладываю rar архив. В нём dll файл libmysql.dll и папка luasql с dll файлом mysql.dll. Обе эти дллелки нужны для работы бд. Распаковываем архив в папку, где лежит файл ptokax.exe (или в папку libs), и ничего никуда не перемещаем. После этого запускаем скрипт для тестирования. Основные функции для работы с mysql в lua
Объект - соединение (conn)
Объект - курсор (cur)
Как работать с таблицами для достижения большей производительности
-------------------- Если у вас нет mysql сервера, то качаем его, например отсюда: Для удобного администрирования там же можно скачать утилиту mysqlgui-win32-static MySQL распространяется под GNU General Public License и под собственной коммерческой лицензией, на выбор. Архив с библиотеками под PtokaX 0.4.*.*: mysql.rar ( 541.42 килобайт ) Кол-во скачиваний: 1673 Скрипт примера работы с MySQL в LUA: mysql_test.lua ( 1.63 килобайт ) Кол-во скачиваний: 458 |
|
|
16.3.2009, 22:37
Сообщение
#22
|
|
Самый главный активист :-D Группа: Модераторы Сообщений: 2 790 Регистрация: 29.6.2008 Из: г. Тула Пользователь №: 97 Спасибо сказали: 440 раз |
что то я совсем запутался с этими структурами БД и их нормальными формами((( Очень хочется увидеть рабочий скрипт хоть какой нибудь! А в особенности хотелось бы увидеть скрипт сведения ников и ипов юзеров!!! Илюх(Setuper), очень прошу напиши как сможешь!!!!
|
|
|
21.4.2009, 19:23
Сообщение
#23
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
Экранирование в MySQL.
Для начала - немного о кавычках. Если мы подставляем в запрос какие-либо данные, то, чтобы отличить эти данные от команд SQL, их надо брать в кавычки. К примеру, если написать Код SELECT * FROM mytable WHERE name = Nick то база решит, что Nick - это имя другого поля, не найдёт его, и выдаст ошибку. Поэтому подставляемые данные (в данном случае имя Nick) надо заключать в кавычки - тогда база сочтет его строкой, значение которой надо присвоить полю name:Код SELECT * FROM mytable WHERE name = 'Nick' Однако, и в самих данных могут тоже встречаться кавычки. К примеру,Код SELECT * FROM mytable WHERE name = 'Д'Артаньян' Здесь база данных решит, что 'Д' - это данные, а Артаньян - команда, которую она не знает, и тоже выдаст ошибку. Поэтому и надо прослешивать все данные, чтобы объяснить базе, что встречающиеся в них кавычки (и некоторые другие спецсимволы) относятся к данным.В результате мы получим правильный запрос, который ошибок не вызовет: Код SELECT * FROM mytable WHERE name = 'Д\'Артаньян' Таким образом, мы выяснили, что при подстановке данных в запрос, следует придерживаться двух правил: - все вставляемые в запрос данные должны быть заключены в кавычки (одинарные или двойные, но удобнее и чаще используются одинарные). - во всех строковых переменных должны быть экранированы слешами спецсимволы. Следует специально отметить: добавленные слеши НЕ идут в базу. Они нужны только в запросе. При попадании в базу слеши отбрасываются. Соответственно, распространенной ошибкой является попытка удалить слеши при получении данных из базы. На самом деле, всё вышесказанное относится к данным строкового типа и датам. Числа можно вставлять не прослешивая и не окружaя кавычками. Если вы так делаете, то ОБЯЗАТЕЛЬНО! насильно приводите данные к нужному типу перед вставкой в запрос, например: Код id = tonumber(id) Однако для простоты (и надёжности) можно и с числами работать, как со строками (проскольку mysql всё равно преобразует их к нужному типу). Соответственно, мы будем любые данные, вставляемые в запрос, прослешивать и заключать в кавычки.Так же, есть ещё одно правило - необязательное, но его следует придерживаться во избежание появления ошибок: Имена полей и таблиц следует заключать в обратные одинарные кавычки - `поле` (клавиша с этим символом находится на стандартной клавиатуре слева от клавиши "1") Ведь имя поля может совпадать с ключевыми словами mysql, но если мы используем обратную кавычку, то MySQL поймёт всё правильно: Код SELECT * FROM `WHERE` WHERE `DATE` = '2009-04-21' Следует различать эти кавычки и не путать одни с другими. Следует также помнить, что обратные кавычки слешами не экранируются! Наиболее эффективное экранирование. Для наиболее эффективного экранирования кавычек следует использовать функцию: Код _G.string.dbformat = function(self, ...) local t = {...} for k, v in _G.ipairs(t) do t[k] = _G.tostring(v):gsub("'", "\\'") end return self:format(_G.unpack(t)) end Рассмотрим пример использования данной функции на примере вставки в таблицу данных: Код con:execute(("INSERT INTO `mytable` (`nick`, `ip`, `client`, `share`) VALUES Что мы сделали? Мы просто, так сказать, переопределили всем известный метод format, написав в качестве его аналога, метод dbformat, который выполняет тоже самое, что и метод format, но дополнительно к этому, он экранирует одинарные кавычки.
('%s', '%s', '%s', '%s')"):dbformat("Д'Артаньян", "192.168.0.1", "StrgDC++", 27635467)) |
|
|
23.4.2009, 12:31
Сообщение
#24
|
|
Главный ра******й тут... Группа: Главные администраторы Сообщений: 1 727 Регистрация: 18.5.2008 Из: RF, 2la Пользователь №: 1 Спасибо сказали: 776 раз |
Увидев код сразу возникла мысль, что функция dbformat усложнена, вот выдержка из
Цитата Переменное число параметров В Lua, как и в С, в функцию можно передавать переменное число параметров. Синтаксис также похож: function f(x, y, ...) end Все параметры, скрытые за ... Lua упаковывает в локальную таблицу arg. У таблицы arg есть поле n, содержащее число переданных аргументов. Для примера, напечатаем все переданные в функцию аргументы: function f(...) for i = 1, arg.n do print(arg[i]) end end f(1, 2, 3, "Вася") -- выведет соответственно 1, 2, 3, "Вася" Значит получается что лишнее вот это: Код local t = {...} т.к. мы имеем уже локальную таблицу arg, правда с лишним параметром n, который легко исключается И еще, объясните мне смысл приставки _G., всегда делал без нее и все работало. Это сделано для реализации модулей или чего еще? |
|
|
23.4.2009, 13:07
Сообщение
#25
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
То, что написано по предложенной ссылке устарело и не работает в lua 5.1. (
Переменная arg работает только в версиях ниже 5.1. В этом можно убедиться, выполнив соответствующий код. Поэтому ничего лишнего тут нету. Приставки _G можете не писать. Просто я взял реализацию этой функции из моего скрипта SBot, который написан с использованием модулей и ООП. Могу ещё добавить, что если оставить как написано (с _G), и ещё дописать перед функцией строку Код local _G = _G то это будет являться оптимизацией выполнения данного метода, причем добавленная строка не несёт расхода ресурсов на копирование, так как глобальная переменная тут копируется по ссылке, а не по значению, при этом, как известно, доступ к локальным переменным производится быстрее, чем к глобальным, - отсуда и оптимизация Всё же советую за основу изучения lua брать сайт Кстати, ООП по предложенной ссылке не использует принципы инкапсуляции и наследования, поэтому оно в разы хуже предложенного мною ООП: http://mydc.ru/ipb.html?s=&showtopic=1...ost&p=10330 Хотя для ознакомления стоит прочитать. Некоторые намёки на инкапсуляцию там есть (правда не в описании ООП, а в начале статьи). |
|
|
23.4.2009, 13:45
Сообщение
#26
|
|
Главный ра******й тут... Группа: Главные администраторы Сообщений: 1 727 Регистрация: 18.5.2008 Из: RF, 2la Пользователь №: 1 Спасибо сказали: 776 раз |
Ну да, зачем спорить!?! Спасибо за пояснения, бум оптимизировать все как только можно! А вот про ООП не знаю, с СИ я не знаком, да и области применения сильно не вижу, покажите мне скрипт или что-то еще где это очевидно полезно, пожалуйста.
|
|
|
23.4.2009, 14:00
Сообщение
#27
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
ООП полезен в любом скрипте, а особенно в больших. Язык Lua используется в играх, и там всё через ООП, так это самый эффективный путь.
|
|
|
24.4.2009, 20:11
Сообщение
#28
|
|
Самый главный активист :-D Группа: Модераторы Сообщений: 2 790 Регистрация: 29.6.2008 Из: г. Тула Пользователь №: 97 Спасибо сказали: 440 раз |
нужно ли создавать каждому скрипту отдельную БД или может назвать БД PtokaScripts и все скрипты будут её юзать?
ООП полезен в любом скрипте, а особенно в больших. Язык Lua используется в играх, и там всё через ООП, так это самый эффективный путь. Очень жду дельного примера)))))) |
|
|
25.4.2009, 9:01
Сообщение
#29
|
|
Главный ра******й тут... Группа: Главные администраторы Сообщений: 1 727 Регистрация: 18.5.2008 Из: RF, 2la Пользователь №: 1 Спасибо сказали: 776 раз |
Да, примеру будут рады все программеры Думаю можно одну бд, главное - уникальность названия таблиц, и я бы предложил делать как в самых популярных движках префикс таблиц, схожий с названием скрипта и задающийся в конфиге, что убережет от совпадения имен таблиц.
|
|
|
25.4.2009, 9:48
Сообщение
#30
|
|
Самый главный активист :-D Группа: Модераторы Сообщений: 2 790 Регистрация: 29.6.2008 Из: г. Тула Пользователь №: 97 Спасибо сказали: 440 раз |
я буду называть БД PtokaScripts если есть другие предложения высказываемся(хотя по большому счёту наверно это не имеет никакого значения!)
|
|
|
25.4.2009, 10:15
Сообщение
#31
|
|
Главный ра******й тут... Группа: Главные администраторы Сообщений: 1 727 Регистрация: 18.5.2008 Из: RF, 2la Пользователь №: 1 Спасибо сказали: 776 раз |
Илюх, я про префиксы, базу ты хоть как назови... К примеру из конфига ипб:
Код $INFO['sql_tbl_prefix'] = 'ibf_'; А вот из пхпмайадмина, тут таблицы галереи и вордпреса, это к примеру, как видишь чтобы они не перемешивались у них разные префиксы. Надеюсь доступно разстолковал что хочу чтобы было во всех скриптах!
Прикрепленные файлы
|
|
|
25.4.2009, 10:24
Сообщение
#32
|
|
Самый главный активист :-D Группа: Модераторы Сообщений: 2 790 Регистрация: 29.6.2008 Из: г. Тула Пользователь №: 97 Спасибо сказали: 440 раз |
Это я понял)))))))
|
|
|
25.4.2009, 10:28
Сообщение
#33
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
По-моему, про префиксы я уже где-то писал, но не важно. Важно то, что использование префиксов всегда оправданно, так же как и использование односторонних `кавычек`.
Что касается ООП, то я могу написать скрипт-пример, только подкиньте идейку скрипта |
|
|
25.4.2009, 10:32
Сообщение
#34
|
|
Самый главный активист :-D Группа: Модераторы Сообщений: 2 790 Регистрация: 29.6.2008 Из: г. Тула Пользователь №: 97 Спасибо сказали: 440 раз |
Илюх, я бы подкинул идейку, но не понимаю где и в чём будет оптимизация при применение ООП! Поэтому и хочу увидеть скрипт))) любой
|
|
|
29.4.2009, 23:05
Сообщение
#35
|
|
Абсолютный новичок Группа: Пользователи Сообщений: 3 Регистрация: 12.4.2009 Пользователь №: 3 017 Спасибо сказали: 0 раз |
А есть библиотеки на 64 битную винду?
32 битка не катит из-за поддержки только 3,5 гигов оперативки :( |
|
|
30.4.2009, 0:00
Сообщение
#36
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
нет. только x32
|
|
|
30.4.2009, 0:04
Сообщение
#37
|
|
Местная ТехПоддержка Группа: Администраторы Сообщений: 1 875 Регистрация: 18.7.2008 Из: Моск. Обл, г. королев, район Болшево Пользователь №: 221 Спасибо сказали: 220 раз |
если инетересует 64бита - есть для линукса. Правда линукс и в 32хбитном режиме тянет 4гига.
|
|
|
30.4.2009, 0:15
Сообщение
#38
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
В 32 разрядных системах 4 Гб - это максимальный размер виртуальной памяти (2 ^ 32 б = 4 Гб)
|
|
|
30.4.2009, 0:26
Сообщение
#39
|
|
Местная ТехПоддержка Группа: Администраторы Сообщений: 1 875 Регистрация: 18.7.2008 Из: Моск. Обл, г. королев, район Болшево Пользователь №: 221 Спасибо сказали: 220 раз |
ядро собирается с опцией BigMEM и тянет дофига. (4 гига точно тянет, проверяли). даже загружаи спецтестом по максимуму.
правдя не для этой темы разговор. |
|
|
30.4.2009, 1:44
Сообщение
#40
|
|
Абсолютный новичок Группа: Пользователи Сообщений: 3 Регистрация: 12.4.2009 Пользователь №: 3 017 Спасибо сказали: 0 раз |
а можно собрать эту библиотеку на 64 разрядную windows? ) а то я в этом не силён... :(
4 гига тоже мало )) нужно хотя бы 6 =) |
|
|
30.4.2009, 8:35
Сообщение
#41
|
|
Местная ТехПоддержка Группа: Администраторы Сообщений: 1 875 Регистрация: 18.7.2008 Из: Моск. Обл, г. королев, район Болшево Пользователь №: 221 Спасибо сказали: 220 раз |
ну мона и 64ре гига =) кто мещает ядро собрать как надо.
|
|
|
Похожие темы
|
Сейчас: 27.11.2024, 3:52 |