我正在开发一个应用程序,它从位于现有应用程序后面的Firebird SQL数据库(通过网络访问)中提取信息。
为了了解应用程序中最常用的表是什么,我在使用应用程序捕获在程序运行时传输到数据库服务器的SQL语句时运行Wireshark。
通过应用程序查看正在访问的表是没有问题的,但是通过网络传递的某些查询值不会显示在捕获的SQL数据包中。而是将这些值替换为我假设的某种变量。
下面是一个示例查询:
select * from supp\x0d\x0aWHERE SUPP.ID=? /* BIND_0 */ \x0d\x0a
(我假设\ x0d \ x0a用于表示SQL查询中的换行符)
有谁知道我怎么能够查看与BIND_0或/ * BIND_0相关的值* /?
非常感谢任何帮助。
P.S。我使用的Firebird版本是1.5 - 我理解这个版本和更新版本中使用的SQL存在语法差异。
答案 0 :(得分:2)
/* BIND_0 */
只是一个注释(可能是由生成查询的工具生成的),占位符是之前的问号。在Firebird语句中 - 通常 - 首先通过将操作op_prepare_statement
= 68(0x44)的查询文本(带或不带占位符)发送到服务器来准备。然后,服务器返回绑定变量的描述和结果集的数据类型。
当查询实际执行时,客户端将把所有绑定变量和执行请求(通常在操作op_execute
= 63(0x3F))中一起发送到一个名为XSQLDA的结构中。