read_query() 函数会在客户端提交每一个 query 后被调用一次,其具有一个单独的参数,即 query 包内容本身。为了访问包的内容,你必须手动解析包内容。

例如,你能够拦截一个 query 包并将其内容打印出来,函数定义如下:

function read_query( packet )

if packet:byte() == proxy.COM_QUERY then

print("we got a normal query: " .. packet:sub(2))

end

end

该例子检查了包的第一个字节以确定包中内容的类型。如果其类型为 COM_QUERY(参阅 Server Command Constants),我们就可以从包中提取 query 信息并将其打印。提供包类型这个结构是非常重要的。对于 COM_QUERY 包,类型后的剩余内容是 query 字串的文本内容。在该例子中,没有对最终发送到 MySQL 服务器的 query 和 query 列表进行任何形式的改变,

如果想要修改一个 query ,或者添加新的 query ,你必须将其填入 query 队列中,然后才能执行你之前放入队列中的那些 query 。如果你没有修改原始的 query 或者 队列,那么从客户端处发送来的 query 将原封不动的发送到服务器。

当向队列中添加 query 时,你应该遵循下面的规则:

a.插入到队列中的包必须是有效的 query 包。对于每一个包,你必须在包的第一个字节中设置包类型。如果你是再队列尾部添加的 query ,你可以将该 query 语句附加到其余包的后面。

b.一旦你向队列中添加了 query ,该队列将被用作向服务器发送 query 的源。如果你是为了获得更多可供使用的信息而向队列中添加 query ,你同样必须将原始 query 也添加到队列中,否则原始的 query 将得不到执行。

c.一旦队列被填入了内容,你必须设置 read_query() 的返回值以表明 query 队列是否应该被发送到服务器。

d.当你向队列中添加 query 时,你应该同时添加一个 ID 。你指定的这个 ID 会伴随结果集返回回来,故你可以通过它将每一个 query 和相应的结果集对应起来。该 ID 除了作为关联 query 和结果集的标识符为没有其他用途。当运行于被动模式时,例如在 profiling 中,你可以标示出相应的原始 query 和相应的结果集,故客户端能够获取到所期望的结果集。

除非你的客户端设计成能够处理返回结果集数量多于原始 query 数量,你应该确保来自客户端的 query 的数量和返回给客户端的结果集数量是相同的。通过使用唯一的 ID ,然后移除你自己插入的 query 对应的结果集将会满足上述功能。

通常来讲,read_query() 函数和 read_query_result() 函数会在一起配合使用,以提供注入额外 query 和移除额外结果集的功能。然而,read_query_result() 函数只有在你在 read_query() 函数内向 query 队列中填入了 query 的前提下才会被调用。

jmr连接mysql_【原创】MySQL Proxy - read_query()相关推荐

  1. websecurity连接mysql_将MySQL连接器JAR放在我的WAR的WEB-INF / lib而不是tomcat lib中,使j_security_check失败...

    我想让我的webapp使用web-inf / lib中的MySQL连接器JAR.但是当我这样做时,j-security_check不能工作.当我把jar放在tomcat lib文件夹中时,它工作正常. ...

  2. go语言代码连接mysql_【mysql】golang连接mysql操作示例增删改查

    golang本身没有提供连接mysql的驱动,但是定义了标准接口供第三方开发驱动.这里连接mysql可以使用第三方库,第三方库推荐使用https://github.com/Go-SQL-Driver/ ...

  3. python 连接mysql_使用MySQL

    MySQL是Web世界中使用最广泛的数据库服务器.SQLite的特点是轻量级.可嵌入,但不能承受高并发访问,适合桌面和移动应用.而MySQL是为服务器端设计的数据库,能承受高并发访问,同时占用的内存也 ...

  4. 测试远程连接mysql_让MYSQL服务支持远程连接(允许mysql远程登录)测试可行

    一般来说远程连接MYSQL数据库,除非两台服务器在同个机房的局域网内,不然访问速度肯定很慢,性价比不高,除非为了远程维护方便,不然一般不会有人这么设置,这里简单谈谈如何在WIN系统下设置MYSQL的远 ...

  5. 易语言组合框连接mysql_用mysql填充的多动态组合框

    数据库 $mySql = "SELECT field FROM fields"; $result = mysql_query($mySql);HTML: while($r = my ...

  6. font连接MySQL_开始MySql

    1.下载: (1)mysql-4.1.7-win-noinstall.zip  解压后就可用,约36M http://www.mysql.com =>米国镜像(似乎比中国的快点) http:// ...

  7. mysql 返回 pair_【原创】MySQL Proxy中socketpair的使用

    学习 MySQL Proxy 0.8.3 的源码后可知,其全部事件处理线程均对全局 socketpair 的读端进行了监听,以实现通知管道的功能:threads->event_notify_fd ...

  8. 熊猫图表 连接mysql_使用PHP将MySQL数据库连接到JavaScript图表

    熊猫图表 连接mysql When using a charting library like AnyChart, which makes visualizing data so quick and ...

  9. iis 无法连接mysql_远程无法连接SQL2000及MySQL的原因和解决办法

    远程无法连接SQL2000及MySQL的原因和解决办法 时间:2019-11-10 11:06 1. 没有在数据库管理面板中设置远程连接IP造成的. 说明:为了提高操作系统的安全性,所有使用了星外安全 ...

最新文章

  1. hadoop 添加删除机器以及设置免密登录
  2. 蜘蛛通过哪些内容评判网站质量高低?
  3. java操作Excel之POI(3)
  4. jenkins没安装git报错
  5. 什么叫POE交换机?POE交换机使用方法介绍?
  6. 【操作系统】部分概念解释题
  7. 信息学奥赛一本通(1321:【例6.3】删数问题(Noip1994))
  8. 实现有意识自主学习的智能程序(1)
  9. 【iOS】使用storyboard界面跳转报错:unrecognized selector sent to instance 0x7
  10. bzoj 1019: [SHOI2008]汉诺塔(打表)
  11. Hadoop——快速入门
  12. linux内存的优化大师,Linux性能优化大师(调整操作系统参数)
  13. oracle里xdb用户,修改Oracle XDB默认监听端口
  14. 收藏--hibernate——继承关系以及三个subclass标签的区别
  15. SRAM和DRAM的真正区别
  16. python-pygame实现飞机大战-4-获取补给、发射强化子弹以及放大招清屏
  17. 常见报错(2)没有为工厂1010订单类型PP01定义参数 消息号 RU010
  18. U盘文件、文件夹不显示却能搜索到 显示U盘文件的解决办法
  19. Maximo安全控制相关表
  20. 图形界限命令在命令行输入_设置图形界限的命令为在命令行输入

热门文章

  1. 跳频通信系统误码率matlab仿真,输出误码率
  2. (音视频开发)WebRTC进阶流媒体服务器开发-多人互动架构
  3. Orange pi GPIO输出控制,裸机点灯大法(一)!
  4. HashMap中负载因子的意义是什么?
  5. python项目之猫咪藏在哪个房间
  6. 为什么移动处理器和桌面处理器很难直接通过跑分来比较
  7. 已解决UnicodeEncodeError: ‘utf-8‘ codec can‘t encode character ‘\ud9b9‘ in position 38: surrogates not
  8. 朋友圈将新增访客记录?微信相关人士:假的 图是P的
  9. js随机从数组内取出一个值(整理)
  10. 【CTR预估】简单介绍