mysql - 验证用户名是否已存在

标签 mysql database vb.net select sql-insert

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

 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”的意思是“插入”,但我的语言是葡萄牙语。

最佳答案

您的代码存在几个问题:

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

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

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

  • 每次运行查询时,您都希望捕获错误,使用完整的错误消息报告错误,然后中止处理

关于mysql - 验证用户名是否已存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54019973/

相关文章:

php - 为什么要在 MSSQL 和 MySQL 中强制打开一个新连接?

sql - 如何使用最新备份更新我的本地 SQL Server 数据库?

c# - WPF:如何从不同程序集中的窗口开始

mysql - 如何使用 Terraform 管理数据库服务器

php - 选择查询检查表单数据是否已存在于数据库 MySQL/PHP 中的小问题

VB.NET 如何让 1 个子应用到多个项目?

vb.net - 如何检查列表框中所选项目中的某些特定单词?

mysql - SELECT 命令计算百分比

mysql - Laravel-Lumen API 的数据库设计

带有 ping 和 mysql 查询结果的 php 主机状态