Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

MyDC.ru _ Библиотеки и модули для RusHub'а _ mysql

Автор: Setuper 12.1.2010, 17:10

Название: mysql
Версия библиотеки: 2.1.1
Хаб: RusHub
Версия БД: 5.0
Описание: Библиотека для подключения базы данных mysql
Использование: Содержимое архива mysql_2.1.1.rar распаковываем в папку libs. Подключается библиотека так: require"luasql.mysql".
Примечание: Если не работает, то попробуйте библиотеку libmysql.dll закинуть в корень (папку с rushub.exe) или же в system32 (syswow64 для x64).

Библиотека win32:  mysql_2.1.1.rar ( 498.2 килобайт ) : 299

Библиотека win64:  mysql_2.1.1_win64.rar ( 757.76 килобайт ) : 133


Проект для сборки на vs2008:  mysql_2.1.1_src_vs9.zip ( 146.39 килобайт ) : 38


Скрипт примера работы с MySQL в LUA:  mysql_test.lua ( 1.63 килобайт ) : 169


Основные функции для работы
Основные функции для работы с mysql в lua


Код
luasql._COPYRIGHT = "Copyright (C) 2003-2007 Kepler Project"
luasql._DESCRIPTION = "LuaSQL is a simple interface from Lua to a DBMS"
luasql._VERSION = "LuaSQL 2.1.1"
luasql._MYSQLVERSION = "5.0.18"


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

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

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




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

  • Метод вызова соединения с базой данных:
    Код
    conn = env:connect([имя_базы], [имя_пользователя], [пароль], [хост], [порт])
    Обязательным является только первый параметр, остальные параметры в случае отсутствия берутся по умолчанию: [имя_пользователя] = "root", [пароль] = "", [хост] = "localhost", [порт] = 3306.
    В случае нехватки памяти возвращается nil и сообщение об ошибке: "LuaSQL: Error connecting: Out of memory."
    В случае неудачного коннекта к базе данных возвращается nil и сообщение об ошибке: "LuaSQL: Error connecting to database. MySQL: [reason]"

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

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

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

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

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



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

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

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

  • Метод, возвращающий таблицу с именами столбцов для данного курсора:
    Код
    cur:getcolnames()
    Метод порождает ошибку скрипта: "LuaSQL: cursor expected", если в метод был подсунут неверный объект.
    Метод порождает ошибку скрипта: "LuaSQL: cursor is closed", если курсор был закрыт.

  • Метод, возвращающий таблицу с типами столбцов для данного курсора:
    Код
    cur:getcoltypes()
    Метод порождает ошибку скрипта: "LuaSQL: cursor expected", если в метод был подсунут неверный объект.
    Метод порождает ошибку скрипта: "LuaSQL: cursor is closed", если курсор был закрыт.

  • Метод, возвращающий число строк, полученных в результате запроса:
    Код
    cur:numrows()
    Метод порождает ошибку скрипта: "LuaSQL: cursor expected", если в метод был подсунут неверный объект.
    Метод порождает ошибку скрипта: "LuaSQL: cursor is closed", если курсор был закрыт.

Автор: CrazyKiller 20.5.2011, 11:45

Падает Скрипт сразу при запуске, пишет ошибку что не найдена Библиотека !

в Логе error loading module 'luasql.mysql' from file 'd:\2\libs\luasql\mysql.dll':
Не найден указанный модуль.

Пути правильные, другие библиотеки работают отлично, проверял с разными скриптами которые требуют Библиотеку MYSQL, в чём может быть проблема ?

Разобрался, заработал когда кинул в корень папки !
Думаю нужна исправить big_smile.gif

Автор: ShadoWx 2.8.2011, 8:50

ребят, хоть убейте для меня билиотеки темный лес просидел все ночь то с сокетами, то с mysql ....
хотел установить скрипт сетапера - antisearch ... в итоге

лог ошибок
Код
[Tue Aug  2 09:51:42 2011] /home/shadowx/rushub_bin/scripts/Antisearch.lua:113: module 'luasql.mysql' not found:
    no field package.preload['luasql.mysql']
    no file '/home/shadowx/rushub_bin/libs/luasql/mysql.lua'
    no file '/home/shadowx/rushub_bin/libs/luasql/mysql/init.lua'
    no file '/home/shadowx/rushub_bin/luasql/mysql.lua'
    no file '/home/shadowx/rushub_bin/luasql/mysql/init.lua'
    no file '/home/shadowx/rushub_bin/scripts/luasql/mysql.lua'
    no file '/home/shadowx/rushub_bin/scripts/luasql/mysql/init.lua'
    no file '/home/shadowx/rushub_bin/scripts/libs/luasql/mysql.lua'
    no file '/home/shadowx/rushub_bin/scripts/libs/luasql/mysql/init.lua'
    no file './luasql/mysql.lua'
    no file '/usr/local/share/lua/5.1/luasql/mysql.lua'
    no file '/usr/local/share/lua/5.1/luasql/mysql/init.lua'
    no file '/usr/local/lib/lua/5.1/luasql/mysql.lua'
    no file '/usr/local/lib/lua/5.1/luasql/mysql/init.lua'
    no file '/usr/share/lua/5.1/luasql/mysql.lua'
    no file '/usr/share/lua/5.1/luasql/mysql/init.lua'
    no file '/home/shadowx/rushub_bin/libs/luasql/mysql.so'
    no file '/home/shadowx/rushub_bin/luasql/mysql.so'
    no file '/home/shadowx/rushub_bin/scripts/luasql/mysql.so'
    no file '/home/shadowx/rushub_bin/scripts/libs/luasql/mysql.so'
    no file './luasql/mysql.so'
    no file '/usr/local/lib/lua/5.1/luasql/mysql.so'
    no file '/usr/lib/lua/5.1/luasql/mysql.so'
    no file '/usr/local/lib/lua/5.1/loadall.so'
    no file '/home/shadowx/rushub_bin/libs/luasql.so'
    no file '/home/shadowx/rushub_bin/luasql.so'
    no file '/home/shadowx/rushub_bin/scripts/luasql.so'
    no file '/home/shadowx/rushub_bin/scripts/libs/luasql.so'
    no file './luasql.so'
    no file '/usr/local/lib/lua/5.1/luasql.so'
    no file '/usr/lib/lua/5.1/luasql.so'
    no file '/usr/local/lib/lua/5.1/loadall.so'


я понимаю что такая ошибка возникает из за не установленной либы ...
пожалуйста поясните как ее собирать ...от А до Я ..включая изменения в мейк файлах .....

Автор: Saymon21 2.8.2011, 14:52

Ведь рассказал всё вчера и кинул изменённое :(
nano /lua-sql-2.2.0~rc1/debian/mysql.Makefile.Debian.conf

тык
Код
### mandatory fields
PKG_NAME=sql.mysql

### things relative to the C library part
CLIB_CFLAGS=$(shell mysql_config --cflags)
CLIB_LDFLAGS=$(shell mysql_config --libs) -llua5.1
CLIB_OBJS=src/luasql.lo src/ls_mysql.lo
VERSION_INFO=2:0:0

### things relative to the lua library part
LUA_HEADER=
LUA_SOURCES=
LUA_MODNAME=luasql.mysql
#LUA_TEST=tests/test.lua mysql database user password

### this part is relative to pkg-config
PKG_VERSION=$(shell dpkg-parsechangelog|grep ^Ver|cut -d ' ' -f 2|cut -d '-' -f 1)
PKG_LIBS_PRIVATE=
PKG_URL=
PKG_REQUIRES=
PKG_CONFLICTS=

### this part is relative to debian libs naming policy
DEB_EXTRA_DASH=-

Код
dpkg-buildpackage -rfakeroot

Автор: arktik 19.12.2011, 10:33

После обновления хаба на версию 2.3.7, а луа плагина 2.6, перестал работать модуль мускула. Вот что пишет в lua_errors.log:

Раскрывающийся текст
Код
[Mon Dec 19 17:36:15 2011] error loading module 'luasql.mysql' from file '/usr/lib/lua/5.1/luasql/mysql.so':
    /usr/lib/lua/5.1/luasql/mysql.so: undefined symbol: lua_getfield

В чем может быть проблема?

Автор: Setuper 19.12.2011, 11:44

На лицо проблемы с lua. Нужно смотреть как mysql либа линкуется с lua, и как линкуется rushub при сборке.
Проверить к одной и той же версии lua они линкуются.

Попробуй пересобрать mysql либу

Автор: arktik 20.12.2011, 8:18

Спасибо. Проблема решена.
Нужно было скомпилировать модуль mysql с особыми параметрами.

Вот config файл, который я изменил:

Код
Код
# $Id: config,v 1.10 2008/05/30 17:21:18 tomas Exp $

# Driver (leave uncommented ONLY the line with the name of the driver)
T= mysql
#T= oci8
#T= odbc
#T= postgres
#T= sqlite
#T=sqlite3
#T=firebird

# Installation directories

# Default prefix
PREFIX = /usr

# System's libraries directory (where binary libraries are installed)
LUA_LIBDIR= $(PREFIX)/lib/lua/5.1

# System's lua directory (where Lua libraries are installed)
LUA_DIR= $(PREFIX)/share/lua/5.1

# Lua includes directory
LUA_INC= $(PREFIX)/include/lua5.1
# LUA_INC= mysql/

# Lua version number (first and second digits of target version)
LUA_VERSION_NUM= 501

# OS dependent
# Здесь надо добавить параметр -llua
LIB_OPTION= -shared -llua
#LIB_OPTION= -bundle -undefined dynamic_lookup #for MacOS X

LIBNAME= $T.so
COMPAT_DIR= ../compat/src

# Compilation parameters
# Driver specific
######## MySQL
DRIVER_LIBS= -L/usr/lib/mysql/ -lmysqlclient -lz
DRIVER_INCS= -I/usr/include/mysql
######## Oracle OCI8
#DRIVER_LIBS= -L/home/oracle/OraHome1/lib -lz -lclntsh
#DRIVER_INCS= -I/home/oracle/OraHome1/rdbms/demo -I/home/oracle/OraHome1/rdbms/public
######## PostgreSQL
#DRIVER_LIBS= -L/usr/local/pgsql/lib -lpq
#DRIVER_INCS= -I/usr/local/pgsql/include/
######## SQLite
#DRIVER_LIBS= -lsqlite
#DRIVER_INCS=
######## SQLite3
#DRIVER_LIBS= -L/opt/local/lib -lsqlite3
#DRIVER_INCS= -I/opt/local/include
######## ODBC
#DRIVER_LIBS= -L/usr/local/lib -lodbc
#DRIVER_INCS= -DUNIXODBC -I/usr/local/include
######## Firebird
#DRIVER_LIBS= -L/usr/local/firebird -lfbclient
#DRIVER_INCS=

WARN= -Wall -Wmissing-prototypes -Wmissing-declarations -ansi -pedantic
INCS= -I$(LUA_INC)
# И здесь добавить -fPIC
CFLAGS= -fPIC -O2 $(WARN) -I$(COMPAT_DIR) $(DRIVER_INCS) $(INCS) -DLUASQL_VERSION_NUMBER='"$V"' $(DEFS)
CC= gcc

# $Id: config,v 1.10 2008/05/30 17:21:18 tomas Exp $

Автор: mariner 20.12.2011, 12:24

эм, ну и зачем тут это? То же самое, что и в 4ом сообщении темы.

Автор: shadow3c 18.8.2014, 4:05

Помогите пожалуйста у меня похожая проблема
http://mydc.ru/topic5661.html