这个查询是否可以安全地防止与Dapper结合使用sql注入? 如果没有,在MySql下编写它的正确方法是什么? 或者是否有更好的版本而不使用concat?
string sql = "SELECT * from user_profile WHERE FirstName LIKE CONCAT("%",@name,"%");"
var result = connection.query<profile>(sql, new {name});
答案 0 :(得分:17)
该代码没有问题,但另一种方法是在调用者处执行concat,即
const string sql = "SELECT * from user_profile WHERE FirstName LIKE @name;";
var result = connection.Query<Profile>(sql, new {name = "%"+name+"%"});
答案 1 :(得分:5)
这是安全,因为您根本没有动态构建SQL 。名称只是一个普通参数。实际上,它与Dapper无关。
在这里使用字符串连接是正确的选择。或者,您可以使用SUBSTRING_INDEX
函数。