我收到此错误:
Unknown column 'admin' in 'where clause'
这是我的登录按钮代码:
mycon.Open();
string cmdstr = "SELECT * FROM usersettingsdb WHERE user_ID = " + textBox1.Text + "";
cmd = new MySqlCommand(cmdstr, mycon);
dr = cmd.ExecuteReader();
string inputpw = "";
string dbpw = "";
while (dr.Read())
{
inputpw = maskedTextBox1.Text;
dbpw = (dr["user_pw"].ToString());
}
dr.Close();
mycon.Close();
我不太明白为什么会出现这个错误,因为我的 Select 语句与我在网上看到的所有其他 select 语句相同
将
的值文本框值括在单引号中
string cmdstr = "SELECT * FROM usersettingsdb WHERE user_ID = '" + textBox1.Text + "'";
编辑:
正如蒂格兰评论的那样。使用参数化查询,而只是连接来自控件
我不太明白为什么我会收到这个错误
然后开始调试。在cmd =
行上放置一个断点并检查cmdstr
的内容。您将看到查询为:
SELECT * FROM usersettingsdb WHERE user_ID = admin
然后你会看到你需要在用户名周围加上引号。现在去阅读SQL注入,参数化查询和DAL的信息。
在 textbox1 周围的 where 子句中需要一组额外的 " "。文本,否则不会传递字符串。
string cmdstr = "SELECT * FROM usersettingsdb WHERE user_ID = "" + textBox1.Text + """;
做这样的事情。
string cmdstr = string.Format("SELECT * FROM usersettingsdb " +
"WHERE user_ID = '{0}'", textBox1.Text.Replace("'","''"));
将'
替换为''
因为 sql 认为'
为转义字符。
但是使用参数化查询是值得推荐的。