В связи с непонятной работой 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 в случае, если закрытие уже было сделано до этого.
Обязательным является только первый параметр, остальные параметры в случае отсутствия берутся по умолчанию: [имя_пользователя] = "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()
Как работать с таблицами для достижения большей производительности
По возможности все поля декларировать как NOT NULL. Это сделает работу с таблицами более быстрой и сохранит 1 бит на каждое такое поле.
Применять значения по умолчанию (DEFAULT). При вызове запроса INSERT в таблицу будут записываться только те поля, значения которых отличаются от DEFAULT.
Используйте настолько малые типы INT, насколько это возможно. Например, применять MEDIUMINT намного лучше, чем обычный INT.
Если у вас нет записей с переменной длиной ( ни одного поля с типом VARCHAR, BLOB или TEXT), то таблица сохраняется в формате " постоянной длиной записи ". Это несколько расходует память, но намного повышает скорость работы.
При использовании нескольких последовательных INSERT запросов, лучше все данные указать в одном INSERT, чем делать несколько INSERT.
При загрузке данных в таблицу лучше использовать LOAD DATA INFILE, чем INSERT, такой метод в 20 раз быстрее.
Для увеличения скорости LOAD DATA INFILE и INSERT нужно увеличить значение переменной key_buffer.
Если ожидается много запросов INSERT или UPDATE, работающих одновременно, то для большей скорости рекомендуется приметь LOCK TABLES.
Время от времени нужно дефрагметировать таблицы. Это делается утилитой isamchk с опциями - evi.
--------------------
Если у вас нет mysql сервера, то качаем его, например отсюда: http://mydc.ru/r/?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
Автор: Nickolya 9.3.2009, 20:02
Угу, а где архив? И есть ли хотя бы справка по функциям?
Автор: mariner 9.3.2009, 21:27
кстати, Илья (Я к сетаперу) - я так думаю, что тем же способом, что и sqlite, в линукс подрубается mysql! У меня require "luasql.mysql" без ошибок пашет ) PS пора делать скрипты с SQLite и MySQl!
Автор: Wariner 9.3.2009, 21:42
надо токо пока не получается
Автор: Setuper 9.3.2009, 22:03
Простите, забыл приложить архив - исправлено
mariner: я не сомневаюсь в этом. Именно эту самую библиотеку я и скомпилил под винду. Поэтому скрипты можно писать кроссплатформенные.
Автор: Wariner 9.3.2009, 22:28
всё таки SQLite в каком то роде предпочтительнее, не все же имеют MySQL сервер....
Автор: Setuper 9.3.2009, 22:40
Поверь, "мускул" имеет гораздо большие возможности по сравнения со "скулой". Sqlite многие даже не считают за базу данных))) Когда-то давно (2 года назад) я писал базы данных под MSSQL и под mysql и не знал, что существует какой-то там sqlite, потому как он не очень широко распространён среди программистов, которые пишут большие и стабильные программы на базе взаимодействия клиент-сервер. Неужели так сложно поставить мускул? Инструкцию по установки что ли накатать?
Автор: Wariner 9.3.2009, 23:26
думаю их полно в инете. Хотелось бы увидеть несколько скриптов с открытым кодом работающих с базой данных! Например простенький топ сообщений! Накидаешь Илюх?
Автор: Setuper 9.3.2009, 23:32
Постараюсь в ближайшее время что-то подобного рода изобразить
Автор: Wariner 10.3.2009, 20:09
Тестовый скрипт удачно запущен совместно с Денвером! Единственное базу пришлось создавать ручками.
PS: есть ли сайты повещённые взаимодействию MySQL и Lua?
Автор: Setuper 10.3.2009, 20:24
Базу естественно надо создавать вручную, а потом только к ней коннектиться. Для создания базы лучше всего использовать утилиту mysqlgui-win32-static (см. первый пост).
Всё что нужно знать по взаимодействию mysql и lua написано в первом посте.
Автор: Wariner 10.3.2009, 20:42
Цитата(Setuper @ 10.3.2009, 20:24)
Всё что нужно знать по взаимодействию mysql и lua написано в первом посте.
упс не глянул пардон! я создал через phpMyAdmin
кстати mysqlgui-win32-static скачал ещё вчера. не работает она у меня(((
Автор: Setuper 10.3.2009, 21:07
Хм... странно из-за чего бы это ей не работать? В общем базу можно создать многими способами, хоть через командную строку))))
Автор: mariner 10.3.2009, 21:40
да, командная строка наше фсио ) (я думаю ты уже догадался, что я console user) PS я готов выложить обновленные пакеты )
Автор: alex82 11.3.2009, 17:21
При выборке данных из таблицы числовые значения возвращаются как строки. Так и должно быть, или я что-то не так делаю?
Автор: Setuper 11.3.2009, 17:23
да. Преобразование в нужные типы нужно делать самому, я об этом писал в первом посту (читай "Метод извлечения результатов")
Автор: Setuper 14.3.2009, 14:23
Свистопляска с кодировками MySQL
Начиная с версии 4.1 появилась возможность устанавливать кодировку на уровне сервера, базы данных, таблицы, столбца. Также появились переменные, которые определяют кодировку клиента (character_set_client), соединения (character_set_connection) и результата (character_set_results).
Например, когда вы добавляете данные в таблицу, MySQL проверяет кодировку клиента (вы можете посмотреть ее, проверив значение переменной character_set_client) и использует ее для определения того, в какой кодировке вы передаете серверу данные.
Переменная character_set_connection используется для определения кодировки для литералов, у которых она не определена и при преобразовании числа в строку.
Это значит, что если у вас данные в кодировке cp1251, то для корректной передачи данных необходимо чтобы character_set_client и character_set_connection были установлены в cp1251.
Во все три выше перечисленные параметры можно установить кодировку одним запросом к MySQL:
Код
SET NAMES cp1251
Это эквивалентно трём следующим командам:
Код
SET character_set_client=cp1251 SET character_set_connection=cp1251 SET character_set_results=cp1251
Однако, этой всей свистопляски можно и не делать если установить кодировки по умолчанию. Кодировки по умолчанию устанавливаются в файле my.ini, который находится в директории установленного вами мускула. В данном файле, в соответствующих "разделах", дописывается следующее:
Внимание! Прописанная настройка init-connect, позволяет не прописывать каждый раз при коннекте к базе данных команду "SET NAMES cp1251", о которой говорилось выше, НО эта настройка не будет выполняться для пользователей, у которых есть привилегия SUPER.
Команда для просмотра кодировок:
Код
SHOW VARIABLES LIKE 'char%';
Использование:
Код
require"luasql.mysql" local env = assert(luasql.mysql()) local con = assert(env:connect("название_бд", "пользователь", "пароль_пользователя", "localhost")) local cur = assert(con:execute"SHOW VARIABLES LIKE 'char%'") local row = cur:fetch({}, "n") while row do Core.SendToAll(string.format("Variable_name: %s, Value: %s", row[1], row[2])) row = cur:fetch(row, "n") end cur:close() con:close() env:close()
И последнее...
При создании базы данных нужно также указывать кодировку создаваемой базы:
Код
CREATE DATABASE IF NOT EXISTS `my_dc_base` DEFAULT CHARACTER SET cp1251 COLLATE cp1251_general_ci;
Соблюдая все вышеизложенные факты, корректная работа базы данных обеспечена!
Автор: MEXAHuK 15.3.2009, 6:49
если у кого нить есть исходники птоки то можно переписать код чтобы она сразу работала с БД и не с хмл файлами. а в настройках просто добавить ещё 4 опции: адрес, имя пользователя, пароль, префикс таблиц...
Автор: alex82 15.3.2009, 7:59
Цитата(MEXAHuK @ 15.3.2009, 5:49)
если у кого нить есть исходники птоки то можно переписать код чтобы она сразу работала с БД и не с хмл файлами. а в настройках просто добавить ещё 4 опции: адрес, имя пользователя, пароль, префикс таблиц...
Исходники есть у PPK. Но он скорее всего пошлёт тебя если попросишь.
Если хорошо постараться, то можно и без исходников прикрутить к птоке MySQL.
Автор: MEXAHuK 15.3.2009, 14:11
и будет обычная птока только с плагином мускуля... может кто нить напишет PPK что бы вышла птока которая не только как сервис, но как сервис с самостоятельным доступом к БД. а не через(пусть и хорошо написанный) плагин.
Автор: Wariner 16.3.2009, 22:37
что то я совсем запутался с этими структурами БД и их нормальными формами((( Очень хочется увидеть рабочий скрипт хоть какой нибудь! А в особенности хотелось бы увидеть скрипт сведения ников и ипов юзеров!!! Илюх(Setuper), очень прошу напиши как сможешь!!!!
Автор: Setuper 21.4.2009, 19:23
Экранирование в 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
Рассмотрим пример использования данной функции на примере вставки в таблицу данных:
Что мы сделали? Мы просто, так сказать, переопределили всем известный метод format, написав в качестве его аналога, метод dbformat, который выполняет тоже самое, что и метод format, но дополнительно к этому, он экранирует одинарные кавычки.
Автор: Nickolya 23.4.2009, 12:31
Увидев код сразу возникла мысль, что функция dbformat усложнена, вот выдержка из http://mydc.ru/r/?http://ilovelua.narod.ru/about_lua.html, которое всем программерам советую прочитать и не раз:
Цитата
Переменное число параметров В Lua, как и в С, в функцию можно передавать переменное число параметров. Синтаксис также похож:
function f(x, y, ...) end
Все параметры, скрытые за ... Lua упаковывает в локальную таблицу arg. У таблицы arg есть поле n, содержащее число переданных аргументов. Для примера, напечатаем все переданные в функцию аргументы:
function f(...) for i = 1, arg.n do print(arg[i]) end end
т.к. мы имеем уже локальную таблицу arg, правда с лишним параметром n, который легко исключается
И еще, объясните мне смысл приставки _G., всегда делал без нее и все работало. Это сделано для реализации модулей или чего еще?
Автор: Setuper 23.4.2009, 13:07
То, что написано по предложенной ссылке устарело и не работает в lua 5.1. (http://mydc.ru/r/?http://www.lua.ru/doc/7.1.html) Переменная arg работает только в версиях ниже 5.1. В этом можно убедиться, выполнив соответствующий код. Поэтому ничего лишнего тут нету. Приставки _G можете не писать. Просто я взял реализацию этой функции из моего скрипта SBot, который написан с использованием модулей и ООП.
Могу ещё добавить, что если оставить как написано (с _G), и ещё дописать перед функцией строку
Код
local _G = _G
то это будет являться оптимизацией выполнения данного метода, причем добавленная строка не несёт расхода ресурсов на копирование, так как глобальная переменная тут копируется по ссылке, а не по значению, при этом, как известно, доступ к локальным переменным производится быстрее, чем к глобальным, - отсуда и оптимизация
Всё же советую за основу изучения lua брать сайт http://mydc.ru/r/?http://www.lua.ru/doc/ так как этот сайт постоянно обновляется и дополняется lua программистами, и следит за всеми изменениями в языке.
Кстати, ООП по предложенной ссылке не использует принципы инкапсуляции и наследования, поэтому оно в разы хуже предложенного мною ООП: http://mydc.ru/ipb.html?s=&showtopic=1429&view=findpost&p=10330 Хотя для ознакомления стоит прочитать. Некоторые намёки на инкапсуляцию там есть (правда не в описании ООП, а в начале статьи).
Автор: Nickolya 23.4.2009, 13:45
Ну да, зачем спорить!?! Спасибо за пояснения, бум оптимизировать все как только можно! А вот про ООП не знаю, с СИ я не знаком, да и области применения сильно не вижу, покажите мне скрипт или что-то еще где это очевидно полезно, пожалуйста.
Автор: Setuper 23.4.2009, 14:00
ООП полезен в любом скрипте, а особенно в больших. Язык Lua используется в играх, и там всё через ООП, так это самый эффективный путь.
Автор: Wariner 24.4.2009, 20:11
нужно ли создавать каждому скрипту отдельную БД или может назвать БД PtokaScripts и все скрипты будут её юзать?
Цитата(Setuper @ 23.4.2009, 15:00)
ООП полезен в любом скрипте, а особенно в больших. Язык Lua используется в играх, и там всё через ООП, так это самый эффективный путь.
Очень жду дельного примера))))))
Автор: Nickolya 25.4.2009, 9:01
Да, примеру будут рады все программеры Думаю можно одну бд, главное - уникальность названия таблиц, и я бы предложил делать как в самых популярных движках префикс таблиц, схожий с названием скрипта и задающийся в конфиге, что убережет от совпадения имен таблиц.
Автор: Wariner 25.4.2009, 9:48
я буду называть БД PtokaScripts если есть другие предложения высказываемся(хотя по большому счёту наверно это не имеет никакого значения!)
Автор: Nickolya 25.4.2009, 10:15
Илюх, я про префиксы, базу ты хоть как назови... К примеру из конфига ипб:
Код
$INFO['sql_tbl_prefix'] = 'ibf_';
А вот из пхпмайадмина, тут таблицы галереи и вордпреса, это к примеру, как видишь чтобы они не перемешивались у них разные префиксы. Надеюсь доступно разстолковал что хочу чтобы было во всех скриптах!
Автор: Wariner 25.4.2009, 10:24
Это я понял)))))))
Автор: Setuper 25.4.2009, 10:28
По-моему, про префиксы я уже где-то писал, но не важно. Важно то, что использование префиксов всегда оправданно, так же как и использование односторонних `кавычек`.
Что касается ООП, то я могу написать скрипт-пример, только подкиньте идейку скрипта
Автор: Wariner 25.4.2009, 10:32
Илюх, я бы подкинул идейку, но не понимаю где и в чём будет оптимизация при применение ООП! Поэтому и хочу увидеть скрипт))) любой
Автор: AlXumuk 29.4.2009, 23:05
А есть библиотеки на 64 битную винду? 32 битка не катит из-за поддержки только 3,5 гигов оперативки :(
Автор: Setuper 30.4.2009, 0:00
нет. только x32
Автор: mariner 30.4.2009, 0:04
если инетересует 64бита - есть для линукса. Правда линукс и в 32хбитном режиме тянет 4гига.
Автор: Setuper 30.4.2009, 0:15
В 32 разрядных системах 4 Гб - это максимальный размер виртуальной памяти (2 ^ 32 б = 4 Гб)
Автор: mariner 30.4.2009, 0:26
ядро собирается с опцией BigMEM и тянет дофига. (4 гига точно тянет, проверяли). даже загружаи спецтестом по максимуму.
правдя не для этой темы разговор.
Автор: AlXumuk 30.4.2009, 1:44
а можно собрать эту библиотеку на 64 разрядную windows? ) а то я в этом не силён... :( 4 гига тоже мало )) нужно хотя бы 6 =)
Автор: mariner 30.4.2009, 8:35
ну мона и 64ре гига =) кто мещает ядро собрать как надо.
Автор: AlXumuk 1.5.2009, 8:01
=) для меня линукс тёмный лес )) щас на Win7 x64 =) может кто-нить наваяет библиотеку на 64 разрядные системы...? =)
Автор: Caratel 19.6.2009, 17:40
Подскажите пожалуйста, что делать делать с такого рода ошибкой:
Код
[18:39] Синтаксис D:\Temp\PtokaX\scripts\mysql_test.lua:13: LuaSQL: Error connecting to database. MySQL: Access denied for user 'пользова'@'localhost' (using password: YES)
Вылазиет, когда хочу запустить тестовый скрипт.
Автор: mariner 19.6.2009, 17:44
а сервер баз MySQL есть? работает? а база для хаба и юзер для подключения есть?
Автор: Caratel 19.6.2009, 19:02
Cтоит денвер. Стоят серваки. Созданы базы через пхп май админ. Всё работает.
Цитата
а база для хаба и юзер для подключения есть?
Создал через пхп май админ нового юзера и базу со всеми привелегиями. А как теперь эту базу подсоединить к хабу?
помогите пожалуйста.
Автор: mariner 19.6.2009, 19:08
в шапке скрипта нормально заданы параметра подключения в mysql?
Автор: Caratel 19.6.2009, 19:26
во, вроде заработало, потыкал потыкал и заработало ^^
Автор: Setuper 19.6.2009, 20:29
Хороший админ сначала перепробует различные варианты, а только потом будет просить помощи. Ты же сделал наоборот.
Автор: Setuper 26.11.2009, 23:50
В очередной раз затрагиваю тему экранирования в 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
Автор: Ольга 5.4.2010, 18:11
Как я понимаю эта библиотека только для Mysql 5? т.е с с 4 версией она работать не будет? Придется переводить сервер под MySQL 5?
Автор: mariner 5.4.2010, 18:25
Не обязательно. Попробуйте.
Автор: TiGRpp 15.6.2010, 5:44
Цитата(Setuper @ 9.3.2009, 20:37)
DLL библиотека для работы с базой данных MySQL 5.
Благодарю. Пересмотрел все темы, связанные с запуском скриптов с использованием MySQL и нигде не нашел указанных библиотек для Линукса.
Выложите, плиз, а лучше покажите способ компиляции библиотек вообще, поскольку такой урок я еще не находил.
Автор: Parad0x 15.6.2010, 17:09
Подскажите где косяк сервер 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': Не найден указанный модуль
Собственно библиотека лежит там где надо и хаб перезапускал
Автор: Nickolya 15.6.2010, 19:21
А какая разрядность ОС? Эти либсы собраны под 32 бита...
Автор: Parad0x 16.6.2010, 17:38
Цитата(Nickolya @ 15.6.2010, 22:21)
А какая разрядность ОС? Эти либсы собраны под 32 бита...
х86, т.е. 32 бита
Автор: Parad0x 17.6.2010, 17:02
запустилось, положил библиотеку в корень хаба
Автор: Setuper 17.6.2010, 17:14
если есть необходимость класть библиотеку в корень, то это может означать, что не запущен mysql сервер.
Автор: Parad0x 17.6.2010, 19:05
Цитата(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': Не найден указанный модуль.
Автор: Чебурашка 12.9.2010, 3:21
Разрядность ОС: 32 а подружиться с x64 не как? :((
Автор: Nickolya 12.9.2010, 12:35
Чебурашка, а ты пробовать пробовал?
Автор: Чебурашка 7.5.2011, 17:14
Цитата(Nickolya @ 12.9.2010, 12:35)
Чебурашка, а ты пробовать пробовал?
Конечно пробовал! как и у других хабов библиотеки подключить нельзя! так как они на х32
Автор: Setuper 7.5.2011, 20:08
Эта либа собрана на билдере 6, в котором отсутствует возможность собрать под x64.
Однако выход есть: юзать 32 разрядную птоху, тогда и либы будут подключаться
Автор: mariner 7.5.2011, 23:57
а илья, ты говорил есть вариант у тебя собирать на 64 бита теперь. Собери эту либу. А то у меня что-то не выходит.
Автор: Setuper 8.5.2011, 10:17
Я же написал, что при помощи борландовского билдера под win64 собрать не могу
Автор: mariner 8.5.2011, 11:24
а студии у тебя нет, так?
Автор: Setuper 8.5.2011, 12:05
Ага Borland Developer Studio у меня нету, да и ставить эту штуку нет желания.
Автор: mariner 8.5.2011, 12:43
нене, я про VS
Автор: Setuper 8.5.2011, 15:54
vs не может компилить борландовские omf либы, vs компилит coff либы, а птоха использует именно omf либы, ибо птоха собрана борландовским компилятором
Автор: mariner 8.5.2011, 16:43
а что тогда может 64х битные omf либы
Автор: Setuper 8.5.2011, 18:01
Borland Developer Studio
Автор: Sergey613 8.10.2012, 17:05
Синтаксис error loading module 'luasql.mysql' from file 'C:\Users\GSG\Downloads\0.4.2.0-x64\luasql\mysql.dll': %1 не является приложением Win32.
Автор: Alexey 8.10.2012, 21:47
Версия Lua: 5.1/5.2 Версия API: 2 Разрядность ОС: 32/64 Версия: LuaSQL 2.3.0 Совместимость: PtokaX 0.4.2.0 build 376 и новее
На 0.5.0.0 с этими библиотеками ошибки в скриптах Webstats и ChatLogsMySQL
[20:06:47] Синтаксис G:\Ptokax_new\scripts\stats.lua:12: attempt to index global 'luasql' (a nil value) [20:06:58] Синтаксис G:\Ptokax_new\scripts\chatlogsmysql.lua:77: attempt to index global 'luasql' (a nil value)
Если переместить из папки tests файл mysql.lua получаем такую ошибку при запуске обоих скриптов
[20:29:35] Синтаксис G:\Ptokax_new\scripts\luasql\mysql.lua:8: bad argument #1 to 'insert' (table expected, got nil)
Автор: Alexey 20.2.2013, 18:26
Замени в тех скриптах код подключения библиотеки
Код
require "luasql.mysql"
на
Код
local luasql = require"luasql.mysql"
Автор: MIKHAIL 4.3.2014, 0:31
Создавая новую БД командой:
Код
CREATE DATABASE IF NOT EXISTS `имя_базы`;
получаю только названия БД строчными буквами. Вопрос: как создать БД в названии которой имеются и прописные буквы (например, такое название "PeopleNames", но не "peoplenames")?
Автор: HackFresse 4.3.2014, 10:42
Рекомендуется использовать имена таблиц именно в нижнем регистре (таблицы хранятся в файлах, а имена файлов регистрозависимы в *nix), для разруливания этого есть параметр lower_case_table_names , http://mydc.ru/r/?http://dev.mysql.com/doc/refman/5.1/en/identifier-case-sensitivity.html
Автор: MIKHAIL 26.3.2014, 10:33
Чем грозит незакрытие курсора cur:close() – ведь работает и так?.. Мне не совсем очевидна необходимость его закрытия.
Автор: Setuper 26.3.2014, 15:40
К сожалению в отличие от Lua, в котором есть GC, СИ не может похвастаться такой фичей, поэтому для освобождения памяти нужно вызывать со стороны Lua закрытие курсора. На пару вызовов закрытие практически никак не скажется, но если курсор юзать в каком-нибудь цикле, то может рано или поздно закончиться память
\scripts\BashMySQL.lua:46: attempt to index global 'luasql' (a nil value) Собственно, require("luasql.mysql") библиотека подключается, но ошибка вылазиет тут: env = luasql.mysql() Перепробовал уже разные версии птоки. Скачал 0.5.0.3 и библиотеки из поста выше. Распаковывал в папку libs - ошибка. Перекладывал рядом с Ptokax.exe - ошибка. Копировал и туда и сюда одновременно - ошибка. Менял директории расположения папки с хабом - ошибка. Установлена связка: Апач -- php -- mysql-5.0.67-win32 -- phpmyadmin База работает, доступ через скрипт есть. Базу под скрипт создал, привилегии пользователю выставил.
Система: WIN 7 Enterprise x64
Помогите уже чем-нибудь, сломал весь мозг, что ещё такого сотворить, чтобы скрипт подключал библиотеку?
P.S. Вопрос закрыт. Внимательность ещё раз внимательность...