c4rt1y

lua之安装和mysql数据库操作

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
GoTop