我有一个mySQL Server和mySQL-Proxy,我正在尝试将我发送给客户端发送的结果作为对选择查询的响应。我已经在lua上写了此代码:
function string.starts(String,Start)
return string.sub(String,1,string.len(Start))==Start
end
function read_query_result(inj)
local fn = 1
local fields = inj.resultset.fields
while fields[fn] do
fn = fn + 1
end
fn = fn - 1
print("FIELD NUMBER: " .. fn)
for row in inj.resultset.rows do
print ("--------------")
for i = 1, fn do
if (string.starts(fields[i].name,"TEST")) then
row[i]="TESTED"
end
print ("DATA: " .. fields[i].name .. " -> " .. row[i])
end
end
return proxy.PROXY_SEND_RESULT
end
我可以正确读取字段名称和值。我可以检测到需要修改结果的状态,但无法将数据发送给客户端。
我看到了两个问题:
- 我在本地行变量中设置了值,但是我还没有找到设置真实结果集的方法(inj.resultset.row [i]或类似的东西)。
-
return proxy.PROXY_SEND_RESULT
有问题,因为我看到每当我评论该句子时,我都会看到结果,如果我不使用它,我会遇到错误。
我尚未找到示例代码作为参考。
好。已解决。
- 数据必须插入表
- proxy_send_result需要设置proxy.response.type。
这是正确的模块:
function read_query_result(inj)
local fn = 1
local fields = inj.resultset.fields
proxy.response.resultset = {fields = {}, rows = {}}
while fields[fn] do
table.insert(proxy.response.resultset.fields, {type = proxy.MYSQL_TYPE_STRING, name = fields[fn].name})
fn = fn + 1
end
fn = fn - 1
for row in inj.resultset.rows do
for i = 1, fn do
if (string.starts(fields[i].name,"TEST")) then
row[i]="TESTED"
end
end
table.insert(proxy.response.resultset.rows, row )
end
proxy.response.type = proxy.MYSQLD_PACKET_OK
return proxy.PROXY_SEND_RESULT
end