タグ別アーカイブ: mysql

LuaでDB操作

Luaでも当然DBにアクセスできます。

LuaSQLというライブラリを使用します。

インストール方法は、Ubuntu8.04であればSynapticからliblua5.1-sql-mysql-2というパッケージを

インストールするだけです。

使い方も簡単です。

MySQLサーバに接続するプログラムを書いてみましょう。

[sourcecode language=”text”]
require "luasql.mysql"

dbname = "test"
dbhost = "localhost"
dbuser = "test"
dbpass = ""

env = assert(luasql.mysql())
con = assert(env:connect(dbname, dbuser, dbpass, dbhost))
res = con:execute("DROP TABLE IF EXISTS members")
res = con:execute([[
CREATE TABLE members(
id int not null primary key auto_increment,
name varchar(50) not null,
regist_dt datetime not null
)
]])

members = {
{ name="user1" },
{ name="us’er2" }
}

for i, r in ipairs(members) do
print("name:" .. r.name)
res = con:execute(string.format([[
INSERT INTO members(name, regist_dt)
VALUES(‘%s’, NOW())]], string.gsub(r.name, "’", "”")))
end

cur = con:execute("SELECT id, name, regist_dt from members")
row = cur:fetch({}, "a")
while row do
print(string.format("#%03d %s (%s)", row.id, row.name, row.regist_dt))
row = cur:fetch({}, "a")
end

cur:close()
con:close()
env:close()
[/sourcecode]

perlやphpなどのプログラムとほとんど変わりません。
32行や35行で使われているfetch関数の引数は、フェッチ結果を代入するテーブルを指定します。
通常は空のテーブルを指定します。
第2引数は取得した行を配列で取得する(“n”)か、カラム名のハッシュで取得する(“a”)かの指定となります。
引数は2つとも省略可能です。この時は新規にテーブル作成され、配列モード(“n”)で取得されます。