MySql语法错误:您在第1行''附近的SQL语法中出错

时间:2014-01-31 07:04:33

标签: c# mysql sql syntax-error

编辑:为这个愚蠢的问题道歉。我自己的注意力集中,加上我还在学习SQL语法的事实让我错过了这个问题。

原始问题:我不知道这里发生了什么。我已经尝试了几种插入数据的方法,但到目前为止还没有工作,我总是得到同样的例外。我不确定是什么导致了这个问题。我错过了命令功能还是语法有问题?

string uName = "tess";
string uPwd = "newpassword";
int authorityLevel = 3;

try
{
    mySqlCommand = mySqlConnect.CreateCommand();
    mySqlCommand.CommandText = "INSERT INTO Users(UserName, UserPassword, AuthorityLevel) VALUES(\"" + uName + "\", \"" + uPwd + "\", " + authorityLevel + ";";
    mySqlCommand.ExecuteNonQuery();
}
catch ((MySql.Data.MySqlClient.MySqlException e)
{
    Console.WriteLine(e.Message);
}

// Output:
// You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

5 个答案:

答案 0 :(得分:2)

你忘了关闭角括号)

mySqlCommand.CommandText = "INSERT INTO Users(UserName, UserPassword, AuthorityLevel) VALUES(\"" + uName + "\", \"" + uPwd + "\", " + authorityLevel + ";";

用此

替换它
mySqlCommand.CommandText = "INSERT INTO Users(UserName, UserPassword, AuthorityLevel) VALUES(\"" + uName + "\", \"" + uPwd + "\", " + authorityLevel + ");";

你添加了一个额外的开口角括号(在

catch ((MySql.Data.MySqlClient.MySqlException e)

替换它
catch (MySql.Data.MySqlClient.MySqlException e)

答案 1 :(得分:1)

我不能说C#,但你的MySQL插入语法应该是,如果所有列都是字符串类型

INSERT INTO Users(UserName, UserPassword, AuthorityLevel) VALUES('username','password','superadmin')

答案 2 :(得分:1)

您的问题很简单:您在查询结束时遗漏了)

请尝试使用此代码:

mySqlCommand.CommandText = "INSERT INTO Users(UserName, UserPassword, AuthorityLevel) VALUES('" + uName + "', '" + uPwd + "', '" + authorityLevel + "');";

注意,最后一个参数也缺少引号,我将它们更改为单引号。

另一个语法错误就在你的标语处:

catch ((MySql.Data.MySqlClient.MySqlException e)

你有两个左括号 - 删除其中一个。

此外,您必须关心SQL注入。如果用户在您的姓名字段中输入此字符串,该怎么办:username'; DROP DATABASE; --?它会丢弃你的数据库吗?

您应该使用string-escape-functions。或 - 甚至更好 - 使用准备好的Statement。 Selman22的回答为您提供了一个如何在C#中做到这一点的例子。

答案 3 :(得分:1)

在你的查询中

你缺少了

mySqlCommand.CommandText = "INSERT INTO Users(UserName, UserPassword, AuthorityLevel) VALUES(\"" + uName + "\", \"" + uPwd + "\", " + authorityLevel + ");";

使用参数化查询,否则您将拥有SQL injection Attack
像这样的东西

String strQuery = "insert into customers (UserName, UserPassword, AuthorityLevel)  VALUES(@name,@password,@authorityLevel)"
SqlCommand cmd = new SqlCommand(strQuery);
cmd.Parameters.AddWithValue("@name", UserName);
cmd.Parameters.AddWithValue("@password", password);

答案 4 :(得分:1)

使用parameterized queries。它使您的代码更加可读安全来防止SQL注入攻击:

 mySqlCommand.CommandText = "INSERT INTO Users(UserName, UserPassword, AuthorityLevel)  VALUES(@name,@pw,@authorityLevel)";
 mySqlCommand.Parameters.AddWithValue("@name", uName);
 mySqlCommand.Parameters.AddWithValue("@pw", uPwd);
 mySqlCommand.Parameters.AddWithValue("@authorityLevel", authorityLevel);