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 站点搜索中的参数化查询问题的主要内容,如果未能解决你的问题,请参考以下文章

带有几个可选搜索词的参数化查询

MySQL 参数化查询的功能就像它在 C# 应用程序中未参数化一样

PHP,Python中的Mysql IN子句参数化

PHP MySQL 查询参数化问题

sql参数化查询

多条件搜索问题 -sql拼接与参数化查询