MySQL module in Eggdrop/ru

From SHellium Wiki
Jump to: navigation, search
Geographylogo.png In other languages: English | Afrikaans | Albanian | Arabic | Brazilian | Bulgarian | Catalan | Chinese | Croatian | Czech | Danish | Dutch | Esperanto | Estonian | Filipino | Finnish | Flemish | French | German | Greek | Hebrew | Hindi | Hungarian | Indonesian | Italian | Japanese | Latvian | Lithuanian | Macedonian | Malay | Malayalam | Norwegian (Bokmål) | Norwegian (Nynorsk) | Persian | Polish | Portuguese | Romanian | Russian | Serbian | Slovak | Slovenian | Spanish | Swedish | Turkish | Ukrainian | Urdu

Contents

Eggdrop - это хорошо, но возможность хранения данных только в текстовых файлах уже не то. На данный момент большие объемы данных куда выгоднее хранить в подходящих СУБД - что и делается в большинстве программ. В данном случае мы рассмотрим СУБД MySQL как наиболее распространенную и, поэтому, наиболее удобную для рядового пользователя. В стандартной поставке бота нет никаких средств для работы с подобными источниками данных, но эта проблема устранена сторонними разработчиками.


mysql.mod

Сайт проекта: http://barkerjr.net/irc/eggdrop/modules/
Документация:http://wiki.barkerjr.net/wiki/MySQL_Module
Текущая версия:0.6

Установка

Eggdrop:

Скопировать mysql.mod в папку src/mod, набрать make config, make, make install.Поместить mysql.so в папку eggdrop/modules, загрузить модуль в eggdrop.conf командой loadmodule mysql.

Windrop:

Поместить mysql.dll в папку eggdrop/modules, загрузить модуль в eggdrop.conf командой loadmodule mysql.

Команды

mysql_connect <база> <хост> [пользователь] [пароль] [сокет|порт]

Инициализирует подключение к базе данных. Если хост указан как `localhost`, подключение будет осуществлено через сокет, а не по TCP порту. Сокет это путь к UNIX сокету, например /tmp/mysql.sock.

mysql_close

Закрывает текущее подключение к базе данных, освобождая используемую память.

mysql_query <запрос>

Выполняет SQL запрос и возвращает результат в виде списка. Символ конца запроса (";" - точка с запятой) автоматически дописывается в конце SQL запроса.

mysql_escape [байт] <строка>

Делает строку безопасной для запросов к MySQL. Добавляет обратные слэши(экранирует бэкслешами "\") перед одинарными кавычками, удваивает бэкслеши и т.п. Указывайте аргумент "байт" только если вы работаете с бинарными данными. Не корректное использование команды вызовет падение бота или хуже.

mysql_errno

Возвращает код последней случившейся ошибки. Список кодов ошибок доступен на: http://dev.mysql.com/doc/refman/5.0/en/error-handling.html

mysql_ping

Проверяет установлено ли подключение к серверу. Если подключение упало - будет осуществлена автоматическая попытка восстановить подключение.

mysql_connectioninfo

Если подключение установлено - возвращает список их имени базы данных, хоста, пользователя и порта/сокета.

mysql_insert_id

Возвращает ID из последнего INSERT.

mysql_connected

Возвращает true, если подключение установлено, false если нет. Внимание: результат может быть неправильный.

mysql_affected_rows

Возвращает число записей, измененных/задействованных последним запросом

FastBase MySQL

Сайт проекта:http://www.fastbase.co.nz/fbsql/index.html
Документация:http://www.fastbase.co.nz/fbsql/fbsql.html
Текущая версия:1.06
Этот модуль не является модулем Eggdrop - это расширение самого TCL. Проект, как и mysql.mod, так же заброшен, но модуль, как ни странно, работает под Windows, работа под UNIX - не тестировалась.

Установка

Eggdrop:

Скомпилировать fbsql.so из исходника fbsql.c. Скопировать fbsql.so, например, в папку modules. Загружать расширение командой load fbsql.so.

Windrop:

Скопировать fbsql.dll в папку modules, необходимую версию libmySQL.dll(идёт в стандартной поставке клиента MySQL) в ту же папку, загрузить расширение командой load fbsql.dll.

Команды

load <fbsql.dll/fbsql.so>

Команда загружает расширение fbsql и добавляет в интерпретатор TCL 6 новых команд: sql sql1 sql2 sql3 sql4 sql5. Все 6 команд абсолютно одинаковы, но они независимы друг от друга и, поэтому, могут быть использованы для доступа к разным серверам, базам или к разным результатам запросов.

sql connect [хост] [пользователь] [пароль] [база данных] [порт]

Подключается к указанному хосту (по умолчанию localhost) используя указанное имя пользователя (по умолчанию имя пользователя в системе) и пароль (если указан).

Возможность указывать хост и порт добавлена в версии 1.06. Возможность указания имени базы данных при подключении исключило необходимость использования "sql selectdb".

sql selectdb <база данных>

Использовать указанную базу данных (на UNIX системах - имя регистрозависимо).

sql disconnect

Отключиться от MySQL сервера.

sql version

Возвращает строку с информацией о FBSQL. Например, "FastBase MySQL Interface for Tcl; version 1.06".

sql [query] <запрос>

Выполняет SQL запрос, опция "query" не обязательна. Если SQL запрос возвращает результат (SELECT, DESCRIBE, SHOW, EXPLAIN), тогда возвращаемым значением будет список, где каждый элемент является так же списком, содержащим поля. Если SQL выражение не имеет возвращаемого значения (UPDATE, INSERT, DELETE), тогда и команда не имеет возвращаемого значения. Смотрите sql startquery для расширенных настроек.

sql numrows

Возвращает число строк, запрошенных последним запросом. Если последний запрос был UPDATE - команда вернет число измененных строк.

sql startquery <запрос> [-huge] [-array имя]

Выполняет SQL запрос, но не возвращает никаких данных. Выражение должно возвращать какие-нибудь значения иначе возникнет ошибка. Чтобы получить данные используйте sql sfetchrow, а для прекращения запроса - sql endquery.
Опция -huge обозначает, что результат запроса может быть очень большим и, поэтому, он не будет сохранен в памяти. Эту команду нужно использовать осторожно, так как по документации MySQL функция mysql_use_result() выставляет READ LOCK на используемые в запросе таблицы до тех пор, пока запрос не будет завершен, поэтому вы не сможете использовать INSERT, UPDATE или DELETE на запрашиваемых таблицах.
Опция -array имя означает, что sql sfetchrow должен присвоить значения полей ассоциативному массиву с указанным именем, то есть "set name(FIELD_NAME) $column_value" для каждого поля, где name - имя ассоциативного массива, FIELD_NAME - имя поля из таблицы в базе данных, $column_value - значение поля.

sql fetchrow

Возвращает следующую строку из результатов (см sql startquery). Если строк больше нет - возвращается пустое значение {}. Если sql startquery была вызвана с опцией -array имя, возвращаемое значение будет именем ассоциативного массива. Если опция array не была использована, тогда команда возвращает список со значениями.

sql endquery

Прекращает запрос, инициированный sql startquery. Обычно, она выполняется, если sql sfetchrow возвращает пустую строку(закончились результаты запроса), но так же может быть без проблем использована и до этого.


mysqlTcl

Сайт проекта:http://www.xdobry.de/mysqltcl/
Документация:http://www.xdobry.de/mysqltcl/mysqltcl.html
Текущая версия:3.05
mysqlTcl является расширением TCL. К счастью, проект жив, дата релиза последней версии - 04.2008. Это расширение обладает куда большим, по сравнению с двумя другими интерфейсами работы с MySQL, функционалом.

Установка

Eggdrop:

Скомпилировать mysqltcl, скопировать libmysqltcl.so в папку modules, загрузить его командой load libmysqltcl.so.

Windrop:

Скопировать libmysqltcl.dll в папку modules, скопировать туда же нужную версию libmySQL.dll, загрузить mysqltcl командой load libmysqltcl.dll. Загружать libmySQL.dll не требуется.

Команды

Всего в mysqltcl есть 33 команды, перевод документации будет позже. Оригинал информации о командах можно посмотреть в официальной документации.

Заключение

Нативными для Eggdrop средствами работать с MySQL врядли получится - проблемы с работой mysql.mod под Windows напрочь отсекают возможность написания кросс-платформенных (Eggdrop/Windrop) TCL скриптов, используя этот модуль.
Из представленных расширений TCL в первую очередь привлекает внимание mysqltcl как наиболее функциональное и более-менее поддерживаемое расширение. Но для небольших скриптов разумней использовать FBSQL - возможность одновременной работы с несколькими базами, простой синтаксис, стабильность работы под Windows. Но явный минус FBSQL - проект скорее мертв, чем жив, поэтому ожидать обновления расширения, расширения функционала или исправления каких-либо багов не стоит. Будем надеяться, что в ближайшем будущем кто-нибудь напишет-таки нормальный, стабильный модуль для Eggdrop/Windrop, который будет работать на обеих версиях бота и поддерживать последние возможности MySQL.

©forum.eggdrop.org.ru

Personal tools
Namespaces

Variants
Actions
Navigation
Indexes
SHellium Sites
Toolbox