参数vs字符串插值

时间:2017-01-31 14:48:26

标签: c# sql

使用参数而不是使用字符串插值有什么好处?

这是

SELECT * FROM dbo.Posts WHERE Author = @p0", userSuppliedAuthor;

更好

$@SELECT * FROM dbo.Posts WHERE Author = {userSuppliedAuthor}";

2 个答案:

答案 0 :(得分:14)

字符串插值只是格式化字符串的语法糖。它无法防止SQL注入。您应该使用SQL参数为查询提供值。

考虑 - 如果userSuppliedAuthor等于

,该怎么办?
'Bob' OR 1 = 1

甚至

'Bob'; DROP TABLE Users;

进一步阅读SQL Injection

答案 1 :(得分:1)

除了Sergey提到的SQL注入问题之外,您可能会遇到包含某些字符的完全有效字符串的问题,例如"'","。"和" @"对SQL而言需要处理的字符。总是最好参数化查询以防止出现这些问题,不仅是直接从用户输入进行注入,还有像电子邮件地址或标题中的所有权一样简单的事情。