当前位置: 首页 > 知识库问答 >
问题:

PHPSQL防止重复用户名:捕捉异常vs选择查询[重复]

蒋硕
2023-03-14

为了防止在数据库中输入重复的用户名并通知用户,在插入时使用异常捕获或在插入前选择查询是否更标准/更可取?

>

  • 异常捕获:如果我尝试插入用户输入,并且用户名已经存在,那么SQL数据库将抛出主键约束违反异常。如果发生这种情况,我可以抓住它,做任何事。

    selectquery:如果它返回任何与用户名匹配的元组,那么我就不需要插入了。然后我可以显示错误消息。

    我想这里使用异常的主要优点是查询和行更少(速度更快?)。然而,我不认为这是一个例外情况,因为重复可能经常发生。

  • 共有3个答案

    尚声
    2023-03-14

    除非您的数据库查询层提供了多个异常类(对于每个SQL状态-在关系数据库的情况下),否则您不应该使用异常捕获;在这种情况下,您需要依赖异常的消息-它可能会随着时间的推移而改变。

    董康平
    2023-03-14

    如果您使用异常捕获方法,即尝试插入,则在出现异常时,请记住一件事计数器对于自动增量列将增加让我们举一个例子,您已成功插入一条记录,其id为1,然后尝试插入您需要的相同信息获得异常,然后您尝试插入另一个数据,该数据将被插入,但id号将为3,而不是2,因为异常发生时1会增加,因此请记住,如果您使用异常情况,则在异常发生时您将丢失这些id号。如果您不关心id计数器,请继续使用此选项。

    但我更喜欢先选择,然后插入

    希望它有意义

    贺山
    2023-03-14

    至少,您应该尽可能使用选项1-处理主键约束冲突-因为数据库是最后一个入口点。如果您检查代码中是否存在重复项(尽管可能性很小),则仍然可能存在重复,因为在返回初始SELECT和返回INSERT语句之间存在延迟,并且其他用户可能在该时间窗口中执行了相同的INSERT。

    但是,首先运行select来查看记录是否存在,而不是盲目地让insert每次都运行,这可能更有效。

    所以我推荐两者。

     类似资料:
    • 这是我的用户注册数据库的方式,但我的问题是:如何防止数据库具有相同用户名的副本,或者换句话说,如果用户名存在于数据库。

    • 调试栏读取 事实证明,每次检查我的用户,通过

    • 在我的 Web 应用程序中,我想实现以程 用户点击使用Google按钮登录 用户在重定向屏幕中选择帐户 我收到一个JWT,其中包含帐户ID和电子邮件地址 我将帐户ID设置为登录提示,并仅设置“同意”提示 我创建Auth URL并再次重定向到Google以获得同意 在下一个同意屏幕中,用户应该只需要批准同意,而不是第二次选择他的帐户 我处理来自同意的回调 根据文档,我实现了“使用Google按钮登录

    • 在节点中。在js服务器上,捕获SIGTERM和捕获SIGINT有什么区别吗? 我认为进程不应该能够防止SIGINT关闭? 我是否能够捕获两个信号并阻止退出?我的实验表明答案是肯定的,但从我所读到的内容来看,SIGINT总是假设关闭一个进程。 或者我把SIGINT和SIGKILL混淆了?也许SIGKILL是我无法恢复的信号? 捕捉这些信号当然可以让我优雅地关机: 我想我把SIGINT和SIGKILL

    • 问题内容: 我如何捕获此异常: 问题答案: 我用弹簧,所以我们通过 但是就像@KevinGuancheDarias提到的那样: 请注意,虽然这可行。 我建议通过在save之前发出findBy来解决该问题 ,因为这很麻烦,我认为不保证它将在将来的版本中使用,甚至可能在没有通知的情况下中断。

    • 如何捕获此异常: