使用参数而不是使用字符串插值有什么好处?
这是
SELECT * FROM dbo.Posts WHERE Author = @p0", userSuppliedAuthor;
比
更好 $@SELECT * FROM dbo.Posts WHERE Author = {userSuppliedAuthor}";
答案 0 :(得分:14)
字符串插值只是格式化字符串的语法糖。它无法防止SQL注入。您应该使用SQL参数为查询提供值。
考虑 - 如果userSuppliedAuthor
等于
'Bob' OR 1 = 1
甚至
'Bob'; DROP TABLE Users;
进一步阅读SQL Injection
答案 1 :(得分:1)
除了Sergey提到的SQL注入问题之外,您可能会遇到包含某些字符的完全有效字符串的问题,例如"'","。"和" @"对SQL而言需要处理的字符。总是最好参数化查询以防止出现这些问题,不仅是直接从用户输入进行注入,还有像电子邮件地址或标题中的所有权一样简单的事情。