我正在做一个快速的CSHTML页面以进行测试。
我需要根据URL上的id参数访问数据库:
var id = Request.QueryString["id"];
var db = Database.Open("mydatabase_connection");
var query = "select * from myrecord where id = " + id;
var row = db.QuerySingle(query);
//我能够以下列方式显示所选记录的字段(称为名称):
@row.name
显然,上述方法受到安全攻击。我希望通过以下方式检索记录:
var query = "select * from myrecord where id=@0";
var row = db.Execute(query, id);
但是,检索字段值时出现运行时错误:
@row.name
获取"行"的正确方法是什么?在第二种方法?
谢谢和问候。
答案 0 :(得分:1)
Database.Execute
用于执行非查询SQL语句,并将受SQL语句影响的记录数作为Int
返回。
我认为您要使用的方法确实是Database.QuerySingle
,它会返回Object
。
即。
var query = "select * from myrecord where id=@0";
var row = db.QuerySingle(query, id);
剃刀:
@row.name
就SQL注入的安全性而言,这种方法是安全的。您将URL值作为参数传递给查询。
运行查询的不安全方式将使用字符串连接:
var query = "select * from myrecord where id=" + id;
不要这样做!它允许恶意用户将SQL语句附加到您的查询中!请始终使用parameterized queries。