-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 構文にエラーがあります。' 'C8059E2Ec7419F590E79D7F1B774BFE6' ' 行 1 付近で使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。

4

3 に答える 3

5

あなたのSQLは次のようになります(もちろん、値はどこにあり、どこにありますか)$user$passwordhash

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

その 2 番目の値が何をすることを期待していますか? 次のようなものが必要だと思います:

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 に答える