10

此查询与 Dapper 结合使用对 sql 注入安全吗?如果不是,那么在 MySql 下编写它的正确方法是什么?或者有没有更好的版本而不使用 concat?

string sql = "SELECT * from user_profile WHERE FirstName LIKE CONCAT("%",@name,"%");"
var result = connection.query<profile>(sql, new {name});
4

2 回答 2

17

该代码没有问题,但另一种方法是在调用者处执行 concat,即

const string sql = "SELECT * from user_profile WHERE FirstName LIKE @name;";
var result = connection.Query<Profile>(sql, new {name = "%"+name+"%"});
于 2012-05-12T11:25:31.123 回答
6

这是安全的,因为您根本没有动态构建 SQL。名称只是一个普通参数。实际上,它与 Dapper 无关。

在这里使用字符串 concat 是正确的选择。或者,您可以使用该SUBSTRING_INDEX功能。

于 2012-05-12T11:07:19.687 回答