• lua基础(2)


    错误处理:

    local function add(a,b)
       assert(type(a) == "number", "a 不是一个数字")
       assert(type(b) == "number", "b 不是一个数字")
       return a+b
    end
    add(10)
    
    
    #如果正确执行,不做任何操作,否则第二个参数当做错误信息。
    assert
    error (message [, level])
    
    终止正在执行的函数,并返回message的内容作为错误信息(error函数永远都不会返回)
    通常情况下,error会附加一些错误位置的信息到message头部。
    Level参数指示获得错误的位置:
    Level=1[默认]:为调用error位置(文件+行号)
    Level=2:指出哪个调用error的函数的函数
    Level=0:不添加错误位置信息
    error

    数据库访问:

    LuaSQL。他是开源的,支持的数据库有:ODBC, ADO, Oracle, MySQL, SQLite 和 PostgreSQL。
    可以使用luarocks安装库
    luarocks install luasql-sqlite3
    luarocks install luasql-postgres
    luarocks install luasql-mysql
    luarocks install luasql-sqlite
    luarocks install luasql-odbc
    _______________________________________________
    require "luasql.mysql"
    
    --创建环境对象
    env = luasql.mysql()
    
    --连接数据库
    conn = env:connect("数据库名","用户名","密码","IP地址",端口)
    
    --设置数据库的编码格式
    conn:execute"SET NAMES UTF8"
    
    --执行数据库操作
    cur = conn:execute("select * from role")
    
    row = cur:fetch({},"a")
    
    --文件对象的创建
    file = io.open("role.txt","w+");
    
    while row do
        var = string.format("%d %s
    ", row.id, row.name)
    
        print(var)
    
        file:write(var)
    
        row = cur:fetch(row,"a")
    end
    
    
    file:close()  --关闭文件对象
    conn:close()  --关闭数据库连接
    env:close()   --关闭数据库环境
    View Code

    面向对象:

    lua中对象就是table
    
    Role = { hp = 100 }
    function Role.addHp(hp)
        Role.hp = Role.hp + hp
    end
     
    Role.addHp(50)
    print(Role.hp)

    类:

    Lua 没有类的概念,不过可以通过元表(metatable)来实现与原型 prototype 类似的功能,而 prototype 与类的工作机制一样,都是定义了特定对象行为。Lua 里的原型特性主要使用元表的 __index 事件来实现,这样当调用对象没定义的方法时,会向其元表的 __index 键(事件)查找。

    Role = { hp = 100 }
    function Role:new(o)
        o = o or {}  
        setmetatable(o, self)
        self.__index = self
        self.aaa='safasdf'
        return o
    end
    function Role:addHp(hp)
        self.hp = self.hp + hp
    end
     
    r = Role:new()
    for i ,j in pairs(r) 
    do
        print(i,j..'aaa')
        print(1)
        end
    r:addHp(50)
    print(r.hp)
    print(r.aaa)
    可以理解为new是类

    继承同理,写个函数,定义当前的表的元表是父类(也是表),执行这个方法相当于实例化对象(返回一个表)。

    防sql注入:

    --防止sql注入  
    local ch_param = ngx.req.get_uri_args()["ch"] or ''  
    --使用ngx.quote_sql_str防止sql注入  
    local query_sql = "select id, ch from test where ch = " .. ngx.quote_sql_str(ch_param)  
    res, err, errno, sqlstate = db:query(query_sql)  
    if not res then  
       ngx.say("select error : ", err, " , errno : ", errno, " , sqlstate : ", sqlstate)  
       return close_db(db)  
    end  
      
    for i, row in ipairs(res) do  
       for name, value in pairs(row) do  
         ngx.say("select row ", i, " : ", name, " = ", value, "<br/>")  
       end  
    end 
  • 相关阅读:
    tr 字符转换命令
    Log4cpp配置文件及动态调整日志级别的方法
    Ubuntu使用总结
    vim安装与配置(进阶版)
    [转载] Linux CC与GCC的区别
    C语言基础总结
    VIM之ctags & Taglist 插件
    vim之基础配置
    使用问题:Chrome卡死崩溃
    Ubuntu16.10安装之后的软件安装
  • 原文地址:https://www.cnblogs.com/drchen/p/7873303.html
Copyright © 2020-2023  润新知