0x01 lua语言介绍
Lua是一个小巧的脚本语言,由标准C编写而成,Lua脚本可以很容易的被C/C++ 代码调用,也可以反过来调用C/C++的函数,这使得Lua在应用程序中可以被广泛应用。
本套系列,讲述lua在各方面的插件使用。
0x02 lua环境+mysql环境安装
#安装依赖环境
yum install readline-devel gcc gcc-c++ git -y
##安装lua
#下载lua安装包
curl -R -O http://www.lua.org/ftp/lua-5.3.0.tar.gz
#解压lua
tar zxf lua-5.3.0.tar.gz
#编译安装
cd lua-5.3.0 && make linux test && make install
##安装数据库
#下载mysql源
rpm -ivh http://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm
#检测源是否安装
yum repolist enabled | grep mysql
#安装mysql,直接yum安装会安装MariaDB,这里会出现zabbix编译的时候出现不存在mysql_config文件
yum install mysql-community-server mysql-devel -y
#启动mysql
service mysqld start
#修改数据库密码
mysqladmin -uroot password "123456"
#创建test数据库
echo "create database IF NOT EXISTS test default charset utf8 COLLATE utf8_general_ci;" | mysql -uroot -p123456
##安装lua的mysql扩展库环境
#下载lua的数据库扩展
wget http://luarocks.org/releases/luarocks-2.2.1.tar.gz
#解压lua的数据库扩展
tar zxpf luarocks-2.2.1.tar.gz
#安装编译luarocks
cd luarocks-2.2.1 &&./configure && make build && make install
#安装mysql扩展
luarocks install luasql-mysql MYSQL_INCDIR=/usr/include/mysql MYSQL_LIBDIR=/usr/lib64/mysql/
0x03 Lua+Mysql数据库语法学习
vi mysql-test.lua
-- 导入MySQL
mysql = require "luasql.mysql"
-- 启动mysql和建立连接test数据库
local env = mysql.mysql()
local conn = env:connect('test','root','123456')
-- 创建数据库,通过这里可以返回两点,如果status为nil,则查看报错信息
-- 语句也可以是这样 status,errorString = conn:execute("CREATE TABLE user (id INTEGER, name varchar(20),pass varchar(32))")
status,errorString = conn:execute([[CREATE TABLE IF NOT EXISTS user (id INTEGER, name varchar(20),pass varchar(32))]])
if status ~= nil then
print(status,errorString )
end
-- 写入数据库,通过这里可以返回两点,如果status为nil,则查看报错信息
-- 方法1 使用[[]]
status,errorString = conn:execute([[INSERT INTO user values(1,'admin','123456')]])
if status ~= nil then
print(status,errorString )
end
-- 方法2 使用引号
status,errorString = conn:execute("INSERT INTO user values(2,'apple','88888')")
if status ~= nil then
print(status,errorString )
end
-- 方法3 引号+变量
status,errorString = conn:execute(string.format("INSERT INTO user values(%d,'%s','%s')",3,"banana","10.00"))
if status ~= nil then
print(status,errorString )
end
-- 更新某条数据[也可以使用双引号]
status,errorString = conn:execute([[UPDATE user SET name='mango',pass="30.00" where id ='3']])
if status ~= nil then
print(status,errorString )
end
-- 删除某条数据[也可以使用双引号]
status,errorString = conn:execute([[DELETE from user where id ='3']])
if status ~= nil then
print(status,errorString )
end
-- 查询数据库,通过这里可以返回两点,如果status为nil,则查看报错信息
-- 语句也可以是这样 status,errorString = conn:execute("select * from user")
cursor,errorString = conn:execute([[select * from user]])
print(cursor,errorString)
-- 通过游标循环读取
row = cursor:fetch ({}, "a")
while row do
print(string.format("Id: %d, Name: %s, Pass: %s", row.id, row.name,row.pass))
row = cursor:fetch (row, "a")
end
-- 关闭游标
cursor:close()
-- 关闭数据库连接和mysql环境
conn:close()
env:close()
0x04 资料来源
http://www.yiibai.com/lua/lua_database_access.html