myDC.ru

Здравствуйте, гость ( Вход | Регистрация )

 

> Mysql, win32 - API 2 | Самая распространённая база данных

Рейтинг 5 V
Setuper
сообщение 9.3.2009, 19:37
Сообщение #41


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

  • Подключение драйвера (библиотеки):
    Код
    require"luasql.mysql"

  • Инициализация драйвера (библиотеки):
    Код
    env = luasql.mysql()

  • Деинициализация драйвера (библиотеки):
    Код
    env:close()
    Возвращает true в случае успешного закрытия, false в случае, если закрытие уже было сделано до этого.




Объект - соединение (conn)

  • Метод вызова соединения с базой данных:
    Код
    conn = env:connect([имя_базы], [имя_пользователя], [пароль], [хост], [порт])
    Обязательным является только первый параметр, остальные параметры в случае отсутствия берутся по умолчанию: [имя_пользователя] = "root", [пароль] = "", [хост] = "localhost", [порт] = 3306

  • Метод закрытия соединения с базой данных:
    Код
    conn:close()
    Закрытие может быть успешным только в случае если все курсоры закрыты. Возвращает true в случае успеха, false - в случае неудачи.

  • Метод выполнения (завершения, совершения) текущей транзакции:
    Код
    conn:commit()
    Возвращает true в случае успеха, false - в случае, когда транзакция не может быть завершина или база данных не поддерживает транзакции (поддержка транзакции в mysql осуществляется с версии 4.0).

  • Метод выполнения SQL запроса к базе данных:
    Код
    conn:execute("запрос")
    В случае правильности запроса, для запросов типа SELECT возвращает курсор, для остальных запросов возвращает число столбцов или строк, успешно обработанных запросом. В случае неверного синтаксиса, или несуществующих таблиц, или несуществующих полей возвращается два значения: первое - nil, второе - сообщение с содержанием ошибки.

  • Метод отката на предыдущую транзакцию:
    Код
    conn:rollback()
    Возвращает true в случае успеха, false - в случае, когда операция не может быть выполнена или база данных не поддерживает транзакции (поддержка транзакции в mysql осуществляется с версии 4.0).

  • Метод включения/отключения автоматических транзакций:
    Код
    conn:setautocommit(boolean)
    Эта функция не может работать на базах, на которых не осуществляются транзакции. На базах данных, на которых нет понятия режима автоматических транзакций, этот механизм осуществляется драйвером. Метод возвращает true в случае успеха, и false - в случае невыполнимости или неосуществимости (поддержка транзакции в mysql осуществляется с версии 4.0).



Объект - курсор (cur)

  • Метод закрытия курсора:
    Код
    cur:close()
    Возвращает true в случае успешного закрытия, false - в случае, если этот курсор уже закрыт.

  • Метод извлечения результатов:
    Код
    cur:fetch([table[,modestring]])
    Извлекает следующий столбец с результатами. Если метод вызывается без параметров, то результаты возвращаются непосредственно вызывающему оператору. Если в первом параметре метода указана таблица, то результаты помещаются в эту таблицу, и методом возвращается эта таблица, при этом может быть использован второй параметр. Второй параметр - это строка, которая указывает на то, как создавать результирующую таблицу:
    "n" - результирующая таблица будет содержать целочисленные индексы (это значение по умолчанию);
    "a" - результирующая таблица будет содержать словесные индексы.
    Целочисленные индексы являются номерами полей в SELECT запросе. Словесные индексы являются названиями полей в SELECT запросе. Дополнительный табличный параметр является таблицей, которую нужно использовать для сохранения следующей строки запроса. В частности, это допускает использование одной уникальной таблицы для всех выборок, и такой механизм может улучшить общее выполнение выборки в целом. Нет гарантии того, что извлечённые результаты будут преобразовываться в нужные в lua типы (в зависимости от содержания), то есть это говорит о том, что возвращаемые результаты всегда представляются в виде строковых значений будь это строка или число. Метод возвращает результирующую таблицу или nil, в случае если достигнута конечная строка. Здесь нужно отметить, что этот метод может возвращать nil, но тем не менее запрос будет выполнен правильно.

  • Метод, возвращающий таблицу с именами столбцов для данного курсора:
    Код
    cur:getcolnames()

  • Метод, возвращающий таблицу с типами столбцов для данного курсора:
    Код
    cur:getcoltypes()

  • Метод, возвращающий число строк, полученных в результате запроса:
    Код
    cur:numrows()




Как работать с таблицами для достижения большей производительности

  1. По возможности все поля декларировать как NOT NULL. Это сделает работу с таблицами более быстрой и сохранит 1 бит на каждое такое поле.
  2. Применять значения по умолчанию (DEFAULT). При вызове запроса INSERT в таблицу будут записываться только те поля, значения которых отличаются от DEFAULT.
  3. Используйте настолько малые типы INT, насколько это возможно. Например, применять MEDIUMINT намного лучше, чем обычный INT.
  4. Если у вас нет записей с переменной длиной ( ни одного поля с типом VARCHAR, BLOB или TEXT), то таблица сохраняется в формате " постоянной длиной записи ". Это несколько расходует память, но намного повышает скорость работы.
  5. При использовании нескольких последовательных INSERT запросов, лучше все данные указать в одном INSERT, чем делать несколько INSERT.
  6. При загрузке данных в таблицу лучше использовать LOAD DATA INFILE, чем INSERT, такой метод в 20 раз быстрее.
  7. Для увеличения скорости LOAD DATA INFILE и INSERT нужно увеличить значение переменной key_buffer.
  8. Если ожидается много запросов INSERT или UPDATE, работающих одновременно, то для большей скорости рекомендуется приметь LOCK TABLES.
  9. Время от времени нужно дефрагметировать таблицы. Это делается утилитой isamchk с опциями - evi.



--------------------

Если у вас нет mysql сервера, то качаем его, например отсюда: http://www.mysql.ru/download/ (файл mysql-5.0.67-win32.zip)
Для удобного администрирования там же можно скачать утилиту mysqlgui-win32-static
MySQL распространяется под GNU General Public License и под собственной коммерческой лицензией, на выбор.


Архив с библиотеками под PtokaX 0.4.*.*: Прикрепленный файл  mysql.rar ( 541.42 килобайт ) Кол-во скачиваний: 1673

Скрипт примера работы с MySQL в LUA: Прикрепленный файл  mysql_test.lua ( 1.63 килобайт ) Кол-во скачиваний: 458
Go to the top of the page
+Quote Post
4 страниц V  < 1 2 3 4 >  
Начать новую тему
Ответов
AlXumuk
сообщение 1.5.2009, 8:01
Сообщение #42


Абсолютный новичок


Группа: Пользователи
Сообщений: 3
Регистрация: 12.4.2009
Пользователь №: 3 017
Спасибо сказали: 0 раз




=) для меня линукс тёмный лес ))
щас на Win7 x64 =)
может кто-нить наваяет библиотеку на 64 разрядные системы...? =)
Go to the top of the page
+Quote Post
Caratel
сообщение 19.6.2009, 17:40
Сообщение #43


Участник
**

Группа: Пользователи
Сообщений: 31
Регистрация: 24.11.2008
Пользователь №: 1 184
Спасибо сказали: 0 раз




Подскажите пожалуйста, что делать делать с такого рода ошибкой:

Код
[18:39] Синтаксис D:\Temp\PtokaX\scripts\mysql_test.lua:13: LuaSQL: Error connecting to database. MySQL: Access denied for user 'пользова'@'localhost' (using password: YES)


Вылазиет, когда хочу запустить тестовый скрипт.
Go to the top of the page
+Quote Post
mariner
сообщение 19.6.2009, 17:44
Сообщение #44


Местная ТехПоддержка
**********

Группа: Администраторы
Сообщений: 1 875
Регистрация: 18.7.2008
Из: Моск. Обл, г. королев, район Болшево
Пользователь №: 221
Спасибо сказали: 220 раз




а сервер баз MySQL есть? работает? а база для хаба и юзер для подключения есть?
Go to the top of the page
+Quote Post
Caratel
сообщение 19.6.2009, 19:02
Сообщение #45


Участник
**

Группа: Пользователи
Сообщений: 31
Регистрация: 24.11.2008
Пользователь №: 1 184
Спасибо сказали: 0 раз




Cтоит денвер. Стоят серваки. Созданы базы через пхп май админ. Всё работает.

Цитата
а база для хаба и юзер для подключения есть?


Создал через пхп май админ нового юзера и базу со всеми привелегиями. А как теперь эту базу подсоединить к хабу?

помогите пожалуйста.
Go to the top of the page
+Quote Post
mariner
сообщение 19.6.2009, 19:08
Сообщение #46


Местная ТехПоддержка
**********

Группа: Администраторы
Сообщений: 1 875
Регистрация: 18.7.2008
Из: Моск. Обл, г. королев, район Болшево
Пользователь №: 221
Спасибо сказали: 220 раз




в шапке скрипта нормально заданы параметра подключения в mysql?
Go to the top of the page
+Quote Post
Caratel
сообщение 19.6.2009, 19:26
Сообщение #47


Участник
**

Группа: Пользователи
Сообщений: 31
Регистрация: 24.11.2008
Пользователь №: 1 184
Спасибо сказали: 0 раз




во, вроде заработало, потыкал потыкал и заработало ^^
Go to the top of the page
+Quote Post
Setuper
сообщение 19.6.2009, 20:29
Сообщение #48


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




Хороший админ сначала перепробует различные варианты, а только потом будет просить помощи. Ты же сделал наоборот.
Go to the top of the page
+Quote Post
Setuper
сообщение 26.11.2009, 23:50
Сообщение #49


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




В очередной раз затрагиваю тему экранирования в mysql.

Символы, которые обязательно должны экранироваться: ' " \
Символы, которые могут экранироваться в LIKE запросе: % _ \ (при этом символ \ должен экранироваться так: \\\\)
Прочие экранированные символы в sql формате:
\0 - символ 0 (NUL) в ASCII коде;
\b - возврат на один символ;
\n - символ новой строки (перевода строки);
\r - символ перевода каретки;
\t - символ табуляции;
\z - символ (Control-Z) таблицы ASCII(26). Данный символ можно закодировать, чтобы обойти проблему, заключающуюся в том, что под Windows ASCII(26) означает конец файла (проблемы возникают при использовании ASCII(26) в выражении mysql database < filename).


Дабы скрипты никогда не падали из-за случайно некорректных запросов, модифицируем ранее описанный мною метод dbformat:
Код
string.dbformat = function(self, ...)
  local t = {...}
  for k, v in ipairs(t) do
    t[k] = tostring(v):gsub("(['\\\"])", "\\%1")
  end
  return self:format(unpack(t))
end



Кроме этого, для запросов типа LIKE, кроме метода dbformat, нужно будет применить ещё один метод:
Код
string.dblikeformat = function(self, ...)
  local t = {...}
  for k, v in ipairs(t) do
    t[k] = tostring(v):gsub("([%%\\_])", "\\%1")
  end
  return self:format(unpack(t))
end


Спасибо сказали:
Go to the top of the page
+Quote Post
Ольга
сообщение 5.4.2010, 18:11
Сообщение #50


Участник
**

Группа: Пользователи
Сообщений: 43
Регистрация: 1.4.2010
Пользователь №: 6 539
Спасибо сказали: 0 раз




Как я понимаю эта библиотека только для Mysql 5? т.е с с 4 версией она работать не будет?
Придется переводить сервер под MySQL 5?
Go to the top of the page
+Quote Post
mariner
сообщение 5.4.2010, 18:25
Сообщение #51


Местная ТехПоддержка
**********

Группа: Администраторы
Сообщений: 1 875
Регистрация: 18.7.2008
Из: Моск. Обл, г. королев, район Болшево
Пользователь №: 221
Спасибо сказали: 220 раз




Не обязательно. Попробуйте.
Go to the top of the page
+Quote Post
TiGRpp
сообщение 15.6.2010, 5:44
Сообщение #52


Продвинутый участник
****

Группа: Пользователи
Сообщений: 162
Регистрация: 19.8.2009
Из: Москва
Пользователь №: 4 201
Спасибо сказали: 24 раза




Цитата(Setuper @ 9.3.2009, 20:37) *
DLL библиотека для работы с базой данных MySQL 5.

Благодарю.
Пересмотрел все темы, связанные с запуском скриптов с использованием MySQL и нигде не нашел указанных библиотек для Линукса.

Выложите, плиз, а лучше покажите способ компиляции библиотек вообще, поскольку такой урок я еще не находил.
Go to the top of the page
+Quote Post
Parad0x
сообщение 15.6.2010, 17:09
Сообщение #53


Участник
**

Группа: Пользователи
Сообщений: 35
Регистрация: 17.1.2009
Из: Свердловская область
Пользователь №: 1 836
Спасибо сказали: 3 раза




Подскажите где косяк
сервер win 2003, ptokax 0.4.1.1, использую удаленный сервер MySQL
при попытке подключить mysql_test.lua в логе:
Код
15.06.2010 20:00:29 - error loading module 'luasql.mysql' from file 'C:\Servers\PtokaX\libs\luasql\mysql.dll':
    Не найден указанный модуль

Собственно библиотека лежит там где надо и хаб перезапускал
Go to the top of the page
+Quote Post
Nickolya
сообщение 15.6.2010, 19:21
Сообщение #54


Главный ра******й тут...
*********

Группа: Главные администраторы
Сообщений: 1 727
Регистрация: 18.5.2008
Из: RF, 2la
Пользователь №: 1
Спасибо сказали: 776 раз




А какая разрядность ОС? Эти либсы собраны под 32 бита...
Go to the top of the page
+Quote Post
Parad0x
сообщение 16.6.2010, 17:38
Сообщение #55


Участник
**

Группа: Пользователи
Сообщений: 35
Регистрация: 17.1.2009
Из: Свердловская область
Пользователь №: 1 836
Спасибо сказали: 3 раза




Цитата(Nickolya @ 15.6.2010, 22:21) *
А какая разрядность ОС? Эти либсы собраны под 32 бита...

х86, т.е. 32 бита
Go to the top of the page
+Quote Post
Parad0x
сообщение 17.6.2010, 17:02
Сообщение #56


Участник
**

Группа: Пользователи
Сообщений: 35
Регистрация: 17.1.2009
Из: Свердловская область
Пользователь №: 1 836
Спасибо сказали: 3 раза




запустилось, положил библиотеку в корень хаба


Спасибо сказали:
Go to the top of the page
+Quote Post
Setuper
сообщение 17.6.2010, 17:14
Сообщение #57


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




если есть необходимость класть библиотеку в корень, то это может означать, что не запущен mysql сервер.
Go to the top of the page
+Quote Post
Parad0x
сообщение 17.6.2010, 19:05
Сообщение #58


Участник
**

Группа: Пользователи
Сообщений: 35
Регистрация: 17.1.2009
Из: Свердловская область
Пользователь №: 1 836
Спасибо сказали: 3 раза




Цитата(Setuper @ 17.6.2010, 20:14) *
если есть необходимость класть библиотеку в корень, то это может означать, что не запущен mysql сервер.

mysql сервер запущен на удаленной машине.
а до этого момента лог все выдавал при запуске тестового скрипта:
Код
15.06.2010 20:00:29 - error loading module 'luasql.mysql' from file 'C:\Servers\PtokaX\libs\luasql\mysql.dll':
    Не найден указанный модуль.
Go to the top of the page
+Quote Post
Чебурашка
сообщение 12.9.2010, 3:21
Сообщение #59


Начинающий
*

Группа: Пользователи
Сообщений: 23
Регистрация: 30.6.2008
Из: Полтава (Украина)
Пользователь №: 102
Спасибо сказали: 0 раз




Разрядность ОС: 32 а подружиться с x64 не как? :((
Go to the top of the page
+Quote Post
Nickolya
сообщение 12.9.2010, 12:35
Сообщение #60


Главный ра******й тут...
*********

Группа: Главные администраторы
Сообщений: 1 727
Регистрация: 18.5.2008
Из: RF, 2la
Пользователь №: 1
Спасибо сказали: 776 раз




Чебурашка, а ты пробовать пробовал?
Go to the top of the page
+Quote Post
Чебурашка
сообщение 7.5.2011, 17:14
Сообщение #61


Начинающий
*

Группа: Пользователи
Сообщений: 23
Регистрация: 30.6.2008
Из: Полтава (Украина)
Пользователь №: 102
Спасибо сказали: 0 раз




Цитата(Nickolya @ 12.9.2010, 12:35) *
Чебурашка, а ты пробовать пробовал?

Конечно пробовал!
как и у других хабов библиотеки подключить нельзя! так как они на х32
Go to the top of the page
+Quote Post

4 страниц V  < 1 2 3 4 >
Ответить в данную темуНачать новую тему
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0

Collapse

> Похожие темы

  Тема Ответов Автор Просмотров Последнее сообщение
No New Posts lua mysql
4 shadow3c 9 431 20.8.2014, 20:33 Посл. сообщение: shadow3c
No New Posts Topic has attachmentsmysql
RusHub | Библиотека базы данных mysql
8 Setuper 21 948 18.8.2014, 4:05 Посл. сообщение: shadow3c
No New Posts Mysql
Unix | База данных
11 Jaska 22 376 21.9.2013, 18:17 Посл. сообщение: KCAHDEP
No new Эффективность mysql
текстовый файл или mysql?
23 Iskandark 23 033 29.12.2011, 9:47 Посл. сообщение: mariner
No New Posts Скрипт антимат и антиреклама с базой в Mysql
1 Vizunchik 7 243 7.12.2011, 20:17 Посл. сообщение: Ksan
No New Posts RusHub and MySQL?! есть ли и как ...
вопросы про mysql, md5 hash и т.д.
4 DRUG_ADDICT 10 143 3.4.2011, 7:03 Посл. сообщение: alex82
No New Posts Topic has attachmentsCustomLocations + MySQL
Определяем провайдера по IP-адресу
0 alex82 7 153 7.3.2011, 18:39 Посл. сообщение: alex82
No New Posts Релизы/Заказы с MySQL
API 2 | MySQL
0 Kingston 5 478 6.2.2011, 10:08 Посл. сообщение: Kingston
No New Posts Topic has attachmentsУстановка и настройка Ubuntu 10.04 под PtokaX 4.1.2 с MySQL. Финал.
Инструкция для новичков в Линуксе
11 TiGRpp 29 492 2.9.2010, 5:09 Посл. сообщение: TiGRpp
No new Topic has attachmentsПоиск по TTH на MySQL
18 Lesh™ 21 726 15.8.2010, 12:40 Посл. сообщение: Lesh™
No New Posts От: Поиск по TTH на MySQL
От темы с ID: 3549
1 Lesh™ 6 712 14.7.2010, 0:30 Посл. сообщение: Lesh™
Closed Скрипт для внесени в данных в MySQL прям из чата командой.
Нужно маленький скриптик который будет экспортировать определенный тек
1 DEN 007 6 387 4.7.2010, 9:45 Посл. сообщение: Setuper
No New Posts От: Заявки на перевод скриптов под MySQL
От темы с ID: 1824
0 alev 5 403 25.4.2010, 12:05 Посл. сообщение: alev
No New Posts От: mysql
От темы с ID: 2952
3 derSpinner 6 649 13.4.2010, 11:41 Посл. сообщение: Setuper
No New Posts ВАЖНО: Topic has attachmentsЗаявки на перевод скриптов под MySQL
5 Wariner 13 854 4.4.2010, 15:18 Посл. сообщение: Accelerator

 



RSS Сейчас: 27.11.2024, 2:58