ГлавнаяСтатьиLua → how to lua and mysql, или как работать с БД в lua
how to lua and mysql, или как работать с БД в lua E-mail
User Rating: / 0
PoorBest 
Written by xternalx   
Monday, 19 April 2010 19:57

Привет, просматривая отчеты гугл аналитикс заметил что на мой сайт некоторые люди приходят в поисках ответов на вопрос, как из lua работать с БД mysql, и прочими БД.

Да, lua позволяет работать с mysql, причем, предоставляет удобный интерфейс для взаимодействия с БД.

Для начала работы с БД необходимо скачать библиотеку luasql(если вы windows юзер), или установить из репозиториев liblua5.1-sql-2

Теперь для того чтобы начать общаться с БД подключаем эту библиотеку в своем скрипте. В этом примере мы будем работать с mysql:

require "luasql.mysql"

Сохранили скрипт, пробуем выполнить. Если ошибок не возникло - значит все хорошо, вы правильно установили расширение luasql ;)

Далее для того чтобы подключиться к БД, нужно сначала создать окружение БД. Не обращайте внимание на эту сумбурность, проще говоря, нам нужно в lua инициализировать драйвер для работы с БД:

local env = assert(luasql.mysql())

Все, теперь у нас есть есть окружение БД mysql.

Далее создаем подключение к БД:

local con, err = env:connect("data_base_name", "user_name", "password", "database_host_name")

Проверяем переменную con. Если она равна nil, значит где то произошла ошибка. При этом в переменной err будет присвоено сообщение с текстом ошибки.

Если ошибки не произошло - работаем дальше ;)

допустим, нам нужно удалить все записи из таблицы tablename в которых uid записи =1.

local result = con:execute("DELETE FROM `tablename` WHERE `uid`=1")

После выполнения этого запроса переменной result будет присвоено значение, соответствующее количеству удаленных записей. То есть, обычно число. Обращаю ваше внимание, что результатом запроса всегда будет число в тех случаях, когда вы выполняете команды типа INSERT, UPDATE, DELETE, DROP, и т.п.

Теперь давайте выберем из БД и выведем на экран все записи, у которых uid = 2.

local result = con:execute("SELECT * FROM `tablename` WHERE `uid`=1")

В результате этого запроса переменной result будет присвоен так называемый курсор, при помощи которого можно оперировать с данными, которые возвратил запрос. Давайте выведем на экран результат запроса:

row = result:fetch ({}, "a")
while row do
  print(string.format("Topic: %s, Datel: %s", row.topic, row.date))
  -- повторно вызываем fetch()
  row = result:fetch(row, "a")
end
 

Повторный вызов fetch в теле цикла необходим для предотвращения зацикливания, т.е. можно сказать, что fetch - это итератор.

Вот в общем то и все, не забудьте уничтожать созданные подключения и окружения вызовом метода close()

 

result:colse()
con:close()
env:close()

 

Last Updated on Monday, 26 April 2010 12:18
 

Add comment


Security code
Refresh