-5
public void Find(string userName, string password)
    {
        string query = "SELECT COUNT(*) FROM user WHERE username =\'" + userName + "\', \'" + GetMd5Sum(password) + "\'";
        MySqlCommand cmd = new MySqlCommand(query, connection);

        try
        {

            //This will return 1 if the username and password exist.
            //It will return 0 if the username and password are not found.
            int count = (int)cmd.ExecuteScalar();

            if (count > 0)
                MessageBox.Show("You have succesfully logged in!");
            else
                MessageBox.Show("Incorrect username or password.");

            connection.Close();
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message.ToString());
        }
    }

我认为这就是问题所在。谁能解释或帮助我解决这个错误?

错误是:

您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“C8059E2Ec7419F590E79D7F1B774BFE6”附近使用正确的语法

4

3 回答 3

5

您的 SQL 看起来像这样(当然,值在哪里$user和是):$passwordhash

SELECT COUNT(*) FROM user WHERE username = '$user', '$passwordhash'

您希望第二个值做什么?我怀疑你想要类似的东西:

SELECT COUNT(*) FROM user WHERE username = '$user' AND passhash = '$passwordhash'

passhash(根据您的实际列名进行更改。)

但是,您不应该只是将该文本添加到您的查询中。相反,更改您的代码以使用参数化 SQL来避免 SQL 注入攻击。始终使用参数而不是将值直接包含到 SQL 中:

  • 它避免了 SQL 注入攻击
  • 它避免了不必要且容易出错的字符串转换(尤其是日期/时间值)
  • 它将您的代码 (SQL) 与您的数据分开,使查询更易于阅读
于 2012-11-11T17:32:41.770 回答
0

您需要在 where 子句中的值之间使用AND

string query = "SELECT COUNT(*) FROM user " + 
               "WHERE username ='" + userName + "' AND " +
               "PASSWORD ='" + GetMd5Sum(password) + "'";

而且您没有命名密码列。

于 2012-11-11T17:30:22.557 回答
-2

您的查询将如下所示:

SELECT COUNT(*) FROM user WHERE username ='user', 'pass'

而它应该是:

SELECT COUNT(*) FROM user WHERE username ='user' AND password='pass'

一点研究和回顾会有所帮助。

于 2012-11-11T17:32:05.093 回答