通常认为将查询字符串存储在数据库中是否可以?

时间:2011-03-28 15:07:18

标签: java mysql database query-string

如果我要从Web应用程序中的传入请求HTTP请求中获取查询字符串,请将其直接存储在MySql数据库中,然后再使用它来重新构建原始请求URL,这会被认为是否正常?

我想知道在查询字符串中是否存在特殊字符或多字节字符之类的“陷阱”,可能需要我在存储数据之前对其进行编码。

提前谢谢。

编辑:我的具体用例如下所示。虽然我主要关心的是查询字符串上的任何特殊字符是否会导致意外问题。

  • 用户提交表单。
  • 在表单处理过程中,我们确定用户需要确认其电子邮件
  • 我们向用户发送确认电子邮件并将原始查询字符串存储在数据库中,因为我们总是希望执行请求中的任何查询字符串参数。
  • 用户确认电子邮件后,我们会将其重定向回原始表单网址,并附加原始查询字符串以确保查询字符串参数的完成。

5 个答案:

答案 0 :(得分:4)

我没有看到任何内在错误,但我更有意义的是存储解析出的值而不是查询字符串格式的数据。例如,如果您稍后在应用程序中更改了查询字符串参数的名称,它可能会进一步证明它。

<强>诠:
而不是将“?param1 = A&amp; param2 = B&amp; param3 = C”存储到名为“querystring”的字段中 将A,B和C存储到称为“Param1,Param2和Param3”的三个字段中可能会更好。

<强>更新
根据您添加到问题中的用例,特别是关于此数据的部分只需临时存储,直到用户确认其帐户为止,我认为以原始格式存储查询字符串没有任何问题。如果您打算长期存储此信息,我的原始建议就是。

答案 1 :(得分:1)

我肯定会对存储的查询使用绑定。

INSERT INTO TABLE_OF_QUERIES (field1, field2, field3) VALUES (?,?,?);

答案 2 :(得分:1)

为什么要停在QueryString?如果你想保存一些标题,为什么不保存整个标题信息,包括cookie,发布数据等。

答案 3 :(得分:0)

完全没有。我在金融机构工作,每个发生的事务都存储在数据库中,包括SQL查询。这用于事务审计,用于审计和报告生成。此外,它还提供了用户交易的良好历史记录。

答案 4 :(得分:0)

取决于真正的目标。

如果您正在处理另一台服务器,并且查询字符串就是您必须识别请求的所有内容(嗯,URI,但可能是您将其余部分视为静态,可能会检查该假设),那么它是理想的使用本质上是标识符的标识符。

如果您的代码在服务器上处理查询本身,那么它对于许多目的来说并不理想,但可以用于日志记录和一些缓存用途。

如果您的代码处理查询的实际参数,则可能不会。