2014-01-30 22 views
1

我有一個MYSQL服務器和MYSQL-PROXY,我試圖操縱我發送給客戶端的結果,作爲對SELECT查詢的響應。我已在lua中編寫了此代碼:mysql代理結果字段操作

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有什麼問題,因爲我看到每當我評論該句子時,我都會看到結果,並且如果我取消註釋,則會收到錯誤消息。

我還沒有找到示例代碼作爲參考。

回答

0

好的。解決了。

  • 數據具有在表
  • 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