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

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

MyDC.ru _ Дополнительные библиотеки для PtokaX _ Mysql

Автор: Setuper 9.3.2009, 19:37

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)





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

  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://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

Угу, а где архив? big_smile.gif И есть ли хотя бы справка по функциям?

Автор: mariner 9.3.2009, 21:27

кстати, Илья (Я к сетаперу) - я так думаю, что тем же способом, что и sqlite, в линукс подрубается mysql! У меня require "luasql.mysql" без ошибок пашет big_smile.gif) PS пора делать скрипты с SQLite и MySQl!

Автор: Wariner 9.3.2009, 21:42

надо токо пока не получается

Автор: Setuper 9.3.2009, 22:03

Простите, забыл приложить архив - исправлено big_smile.gif

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

думаю их полно в инете. Хотелось бы увидеть несколько скриптов с открытым кодом работающих с базой данных! Например простенький топ сообщений! Накидаешь Илюх? shame.gif

Автор: Setuper 9.3.2009, 23:32

Постараюсь в ближайшее время что-то подобного рода изобразить big_smile.gif

Автор: 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 я готов выложить обновленные пакеты big_smile.gif)

Автор: 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, который находится в директории установленного вами мускула. В данном файле, в соответствующих "разделах", дописывается следующее:
Код
[client]

default-character-set=cp1251
character-sets-dir="C:/MySQL/share/charsets/"


Код
[mysql]

default-character-set=cp1251


Код
[mysqld]

default-character-set=cp1251
default-collation=cp1251_general_ci
character-sets-dir="C:/MySQL/share/charsets/"
init-connect='SET NAMES cp1251'


Внимание! Прописанная настройка 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

Рассмотрим пример использования данной функции на примере вставки в таблицу данных:
Код
con:execute(("INSERT INTO `mytable` (`nick`, `ip`, `client`, `share`) VALUES
('%s', '%s', '%s', '%s')"):dbformat("Д'Артаньян", "192.168.0.1", "StrgDC++", 27635467))
Что мы сделали? Мы просто, так сказать, переопределили всем известный метод 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

f(1, 2, 3, "Вася") -- выведет соответственно 1, 2, 3, "Вася"

Значит получается что лишнее вот это:
Код
  local t = {...}

т.к. мы имеем уже локальную таблицу arg, правда с лишним параметром n, который легко исключается big_smile.gif

И еще, объясните мне смысл приставки _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, который написан с использованием модулей и ООП. big_smile.gif

Могу ещё добавить, что если оставить как написано (с _G), и ещё дописать перед функцией строку

Код
local _G = _G
то это будет являться оптимизацией выполнения данного метода, причем добавленная строка не несёт расхода ресурсов на копирование, так как глобальная переменная тут копируется по ссылке, а не по значению, при этом, как известно, доступ к локальным переменным производится быстрее, чем к глобальным, - отсуда и оптимизация big_smile.gif

Всё же советую за основу изучения 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

Ну да, зачем спорить!?! big_smile.gif Спасибо за пояснения, бум оптимизировать все как только можно! А вот про ООП не знаю, с СИ я не знаком, да и области применения сильно не вижу, покажите мне скрипт или что-то еще где это очевидно полезно, пожалуйста.

Автор: 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

Да, примеру будут рады все программеры big_smile.gif Думаю можно одну бд, главное - уникальность названия таблиц, и я бы предложил делать как в самых популярных движках префикс таблиц, схожий с названием скрипта и задающийся в конфиге, что убережет от совпадения имен таблиц. secret_smile.gif

Автор: Wariner 25.4.2009, 9:48

я буду называть БД PtokaScripts если есть другие предложения высказываемся(хотя по большому счёту наверно это не имеет никакого значения!)

Автор: Nickolya 25.4.2009, 10:15

Илюх, я про префиксы, базу ты хоть как назови... big_smile.gif К примеру из конфига ипб:

Код
$INFO['sql_tbl_prefix']            =    'ibf_';
А вот из пхпмайадмина, тут таблицы галереи и вордпреса, это к примеру, как видишь чтобы они не перемешивались у них разные префиксы. Надеюсь доступно разстолковал что хочу чтобы было во всех скриптах! surrender.gif

 

Автор: Wariner 25.4.2009, 10:24

Это я понял)))))))

Автор: Setuper 25.4.2009, 10:28

По-моему, про префиксы я уже где-то писал, но не важно. Важно то, что использование префиксов всегда оправданно, так же как и использование односторонних `кавычек`.

Что касается ООП, то я могу написать скрипт-пример, только подкиньте идейку скрипта big_smile.gif

Автор: 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 разрядную птоху, тогда и либы будут подключаться big_smile.gif

Автор: 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 и новее

Выложенные ранее в этой теме библиотеки не будут работать на PtokaX 0.4.2.0 и новее. Для работы с MySQL на PtokaX 0.5.0.0 нужны вот эти:
 LuaSQL_2.3.0_git9.4.2012__MySQL_5.5.22.7z ( 1.03 мегабайт ) : 27
 LuaSQL_2.3.0_git9.4.2012__MySQL_5.5.22_x64.7z ( 1.01 мегабайт ) : 23

Автор: darkangel17 20.2.2013, 14:50

На 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 закрытие курсора.
На пару вызовов закрытие практически никак не скажется, но если курсор юзать в каком-нибудь цикле, то может рано или поздно закончиться память big_smile.gif

Автор: Alexey 2.6.2014, 15:11

Библиотека для работы с базой данных MySQL на PtokaX 0.5.0.2:
 LuaSQL_2.3.0_MySQL_5.6.15.7z ( 1.27 мегабайт ) : 6
 LuaSQL_2.3.0_MySQL_5.6.15_x64.7z ( 1.27 мегабайт ) : 8

Библиотека для работы с базой данных MySQL на PtokaX 0.5.0.3:
 LuaSQL_2.3.0_MySQL_5.6.23.7z ( 1.27 мегабайт ) : 10
 LuaSQL_2.3.0_MySQL_5.6.23_x64.7z ( 1.27 мегабайт ) : 13

Автор: Prontor 19.8.2017, 8:59

\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. Вопрос закрыт. Внимательность ещё раз внимательность... big_smile.gif