2016-02-29 30 views
2

我想逃避對LUA例如單引號:的Lua的String.format逃逸

local sqlCmd = string.format([[INSERT INTO temp_storage 
SET  gID = '%s' 
]], gID) 

的問題是:

我的腳本使用SQLite到目前爲止獲得一個MySQL表的一些數據gID也可以包含單引號'但後來sql語句包含錯誤。

如何預防?我並不是在尋找一種搜索和替換的方法 - 更多的是爲了替換內建函數而使sql仍然有效。

+3

這稱爲查詢參數化,您可以查看您正在使用的任何SQL客戶端,例如, http://stackoverflow.com/questions/1224806/how-to-quote-values-for-luasql –

+0

謝謝你,我更新了它。關於mysql。 – frgtv10

+1

儘管SQLLite和MySQL並不是一回事 –

回答

2

我們缺少一些關於如何在sqlite3數據庫上執行查詢的信息,您使用哪個庫?

其次,這是不安全的連接'字符串'將在數據庫上執行,這可能會導致sql_injection。 安全的方式來做到這一點,它綁定的參數,這'告訴'分貝將輸入視爲參數只有,違反以前的方式。

來自我認識的庫,LuaSQLite3將完成這項工作(在代碼中表示爲「lsqlite3」)。

爲您的使用情況基本API是:

local sqlite3 = require("lsqlite3") 
local db = sqlite3.open_memory() 

gID = 6 

local insert_stmt = assert(db:prepare("INSERT INTO temp_storage SET gID = ?")) 
insert_stmt:bind_values(gID) 
insert_stmt:step() 
insert_stmt:reset() 

我已經修改了官方的例子( 「statement.lua」)之一。