单击按钮时,它不会更新数据库中的数据。我有3个文本框,一个用于输入用户名,第二个用于输入旧密码,第三个用于输入新密码
Dim con As New MySqlConnection("host=localhost; username=root; password=; database=pawnshop")
Dim cmd As New MySqlCommand
Dim dr As MySqlDataReader
con.Open()
cmd.Connection = con
cmd.CommandText = " select password from login where password ='" & txtChange.Text & "'"
dr = cmd.ExecuteReader
If dr.HasRows Then
cmd.Connection = con
cmd.CommandText = " UPDATE login SET password ='" & txtConfirm.Text & "' where userid = '" & txtUser.Text & "'"
Else
MsgBox("Password is not correct")
End If
答案 0 :(得分:1)
密码是reserved word for MySql。如果你有这个名字的字段,你应该记得总是在那个单词周围添加反引号。
表示您的代码需要重写以避免Sql注入,解析问题,资源泄漏以及性能方面的一点改进。
Using con = New MySqlConnection(......)
Using cmd = New MySqlCommand()
con.Open()
cmd.Connection = con
cmd.CommandText = "select `password` from login where `password` =@oldp"
cmd.Parameters.Add("@oldp", MySqlDbType.String).Value = txtChange.Text
Dim result = cmd.ExecuteScalar()
if result IsNot Nothing then
cmd.Parameters.Clear()
cmd.CommandText = "UPDATE login SET `password` = @newp where userid = @uid"
cmd.Parameters.Add("@newp", MySqlDbType.String).Value = txtConfirm.Text
cmd.Parameters.Add("@uid", MySqlDbType.Int32).Value = txtUser.Text
cmd.ExecuteNonQuery()
Else
MsgBox("Password is not correct")
End If
End Using
End Using
保持存在的另一点是明文密码问题。如果您将用户的密码以明文形式存储在数据库中,则可以使用任何管理工具(MySqlWorkbench,phpMyAdmin ....)访问数据库的每个人都可以轻松地了解所有用户的密码。这是一个更复杂的问题,如果你搜索这个网站,你可以找到很多关于那个的问题/答案
答案 1 :(得分:0)
我没有看到cmd.ExecuteReader
命令的UPDATE
。你错过了那个,或者它刚从帖子中丢失了。您应该执行查询
If dr.HasRows Then
cmd.Connection = con
cmd.CommandText = " UPDATE login SET password ='" & txtConfirm.Text & "' where userid = '" & txtUser.Text & "'"
dr = cmd.ExecuteReader // missing statement
Else
MsgBox("Password is not correct")
End If