PetaPoco 的 Query(string query, parameters) 方法是否可以防止 SQL 注入?

Does PetaPoco's Query(string query, parameters) method protect from SQL injection?

PetaPoco's home page 中提到 PetaPoco 的 SQL 生成器(Sql 对象)防止 SQL 注入。但是 Query(string query, parameters) 方法是否可以防止 SQL 注入?

SQL 生成器是安全的:

var id = 123;
var a = db.Query<article>(PetaPoco.Sql.Builder
  .Append("SELECT * FROM articles")
  .Append("WHERE article_id=@0", id)
);

但是这样传递参数的字符串查询安全吗?

var id = 123;
var a = db.Query<article>("SELECT * FROM articles WHERE article_id=@0", id);

是的,它确实可以防止 SQL 注入。

如果您不确定,可以通过 运行 对正在执行的 SQL 进行 SQL 跟踪来验证这一点。或者提供一些带有单引号和双引号的输入(针对 nvarchar 列)并查看是否发生运行时异常(如果 SQL 注入有问题就会发生)。

另见 https://github.com/CollaboratingPlatypus/PetaPoco/issues/326#issuecomment-238538854 :

this is the correct behaviour. The SQL and parameters are passed to the DB Command to prevent injection based attacks. The connected DB will put the SQL and parameters together in a safe manner