MySQL 站点搜索中的参数化查询问题
Posted
技术标签:
【中文标题】MySQL 站点搜索中的参数化查询问题【英文标题】:Issue with parameterized queries in a MySQL site search 【发布时间】:2013-09-24 07:01:25 【问题描述】:我正在尝试使用 c# ASP.NET 和 mysql 创建一个简单的站点搜索,并且我正在尝试使用参数化查询来防止 SQL 注入。那里已经有很多信息,但我仍然无法让它工作,任何人都可以看到我的代码有什么问题吗?有没有我没有引用的库?
这是我当前的代码:
using MySql.Data.MySqlClient;
string q = Request["q"].IsEmpty() ? "" : Request["q"];
List<dynamic> MyList = new List<dynamic>();
using(MySqlConnection con = new MySqlConnection("server=localhost;database=database;user id=user;password=password"))
string sql = "SELECT * FROM Items WHERE Name = @Name";
con.Open();
MySqlCommand cmd = new MySqlCommand(sql,con);
cmd.Parameters.AddWithValue("@Name", q);
MySqlDataReader reader = cmd.ExecuteReader();
while(reader.Read())
MyList.Add(new
Value = reader["Value"].ToString()
);
con.Close();
如果我将 sql 参数换成数据库中的实际值,它确实会返回项目,如下所示:
string sql = "SELECT * FROM Items WHERE Name = 'aValue'";
【问题讨论】:
您是否收到任何错误,或者它只是不返回任何数据? 嘿 Sam - 只是没有返回数据! 调试并查看变量 q 有 'aValue'... 是的,q 变量具有正确的预期值 【参考方案1】:while(reader.Read())
MyList.Add(new
Value = reader["Value"].ToString()
);
我认为上面的代码中可能有一些拼写错误 - 不确定这是否完全从您的源代码中复制而来 - 但您可能缺少一个结束 for youe while 循环
另外,使用也是一个好习惯
using(MySqlDataReader Reader = cmd.ExecuteReader())
...
就像你为 mySqlConnection 对象所做的那样来保存内存泄漏(但这不是你的问题。)
【讨论】:
以上是关于MySQL 站点搜索中的参数化查询问题的主要内容,如果未能解决你的问题,请参考以下文章