数据库查询:参数化值还是附加值?

时间:2018-07-31 06:29:45

标签: mysql sql database

我想知道哪种方法在性能和安全性方面是更好的方法。我正在使用MySql DB,值是varchar类型。

我应该直接将值连接起来以形成查询字符串并执行查询吗? (要么) 我应该使用参数化查询吗?

预先感谢

3 个答案:

答案 0 :(得分:2)

您应该先关注数据安全性,然后再关注性能。如果连接查询参数,则安全性受到威胁,并且这可能会破坏您的查询语句;这不是更好的方法。

因此,您应该对查询进行参数化而不是为安全措施而串联,这将花费很少的时间来处理查询字符串。

答案 1 :(得分:1)

我认为安全确实是这里唯一的主要问题。如果您使用语句构建动态查询,那么您就可以进行SQL注入,尤其是在查询的某些输入中包含来自外部世界的未经灭菌的数据的情况下。如果您确实使用语句,则可以最大程度地减少这种情况的发生。

关于性能,在构建和执行语句时会有一些开销,但是我敢打赌,在原始字符串上使用语句的代价非常小。性能的更大问题可能是查询本身以及如何调整架构。

所以,我的投票是使用该陈述的,前提是绩效是此处要考虑的次要因素。

答案 2 :(得分:1)

最推荐使用参数化查询。它将防止SQL注入的威胁,并且为您提供了在需要时更新查询的灵活性,而不会暴露您的查询。

您可以将常量查询用作基础开发的一部分,但是当涉及到生产代码时,应该使用参数化查询,并且应该尝试使用准备好的语句而不是普通的字符串语句。在Java JDBC中使用准备好的Statement可以同时提高性能和安全性。