验证用户名是否已经存在

时间:2019-01-03 10:00:17

标签: mysql vb.net

以我创建新用户的形式,我希望它验证用户名是否已经存在,然后在注册按钮中输入以下代码:

 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Try
        Dim Inserir As String = "INSERT INTO `techstorehunter`.`utilizadores`(`Username`,`Password`,`pergunta`,'resperg')VALUES('" & TextBox1.Text & "','" & TextBox2.Text & "','" & TextBox3.Text & "','" & ComboBox1.Text & "')"
        ExecuteQuery(Inserir)

    Catch
        MessageBox.Show("Username already exists")
    End Try

    If TextBox1.Text = "" Then
        MessageBox.Show("Insert a username")
    End If
    If TextBox2.Text = "" Then
        MessageBox.Show("Insert a password")
    End If
    If TextBox3.Text = "" Then
        MessageBox.Show("You need to answer a question")
    End If
    If ComboBox1.Text = "" Then
        MessageBox.Show("You need to select a question")
    End If
End Sub

但是,每当我创建一个用户时,它都会说它已经存在,即使不存在,我该怎么办?谢谢。

PS:“ Inserir”的意思是“ Insert”,但我的语言是葡萄牙语。

1 个答案:

答案 0 :(得分:2)

您的代码有几个问题:

首先,在运行sql查询后验证输入 :应该首先进行验证,如果一切顺利,则执行INSERT,否则,您将暴露于将哑数据插入数据库中,或者输入不完整会收到“用户已存在”警告

此外,您还捕获了所有数据库错误并将其解释为“用户已存在”;通过这种方式,您可能会隐藏其他数据库错误,而不是重复的用户记录。正确的进行方法是:

  • 在表单验证后,通过如下查询检查现有用户,其中问号应由提交的用户名代替。如果查询返回任何内容,则说明您肯定有一个重复的用户,并且可以发出适当的警告并停止处理。
SELECT 1 FROM `techstorehunter`.`utilizadores` WHERE `Username` = ?
  • 如果第一个查询什么都不返回,则可以运行INSERT语句

  • 每次运行查询时,您都想捕获错误,用完整的错误消息报告错误,并中止处理