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