【问题标题】:PHP MySQL Is there any way to get the column key from an errorPHP MySQL 有没有办法从错误中获取列键
【发布时间】:2016-08-01 17:52:06
【问题描述】:

我正在为一个网站创建一个注册系统。 MySQL 数据库具有独特的字段,因此用户不能在同一个电子邮件、用户名或电话号码上创建多个帐户。当数据重复时,使用 mysqli_error() 会返回错误,例如键“EMAIL”的重复条目“email@example.com”,错误代码为 1062。我想要做的是让用户返回输入不同的电子邮件地址、用户名或电话号码,然后我在这种情况下需要列的 KEY 'EMAIL' 有没有办法从错误发回中做到这一点。 谢谢你

【问题讨论】:

  • 不要使用已弃用的函数。
  • 删除mysqli_error() 函数(我的提示:仅将其用于调试,不能公开使用。此消息让可能的攻击者知道您的系统易受攻击。)。使用email 作为主键.. 导致此错误
  • "select *" 绝对让我发疯。永远不要使用它。它很懒惰并且会导致问题 - 除了返回的数据比需要的多得多,尤其是在宽表中。

标签: php mysql database error-handling


【解决方案1】:

您应该在插入之前获取检查查询,如下所示:

SELECT * FROM TABLE WHERE email = '$email' OR phone = '$phone' OR username = '$username'

然后你可以进行简单的检查并抛出异常/错误。

【讨论】:

    【解决方案2】:

    您应该添加验证规则:在保存到数据库之前检查电子邮件、电话和用户名的唯一性。

    select * from users where email = ?
    select * from users where phone = ?
    

    如果行存在 - 向用户写入消息。否则创建新行。

    您还应该在电话和用户名上有唯一的索引。如果您有一张大表(100k+ 行),则有必要避免查询缓慢。

    【讨论】:

      【解决方案3】:

      您应该添加验证规则:在保存到数据库之前检查 emailphoneusername 的唯一性。

      select * from users where email = ?
      select * from users where phone = ?
      

      如果行存在 - 向用户写入消息。否则创建新行。

      您还应该在电话和用户名上有唯一的索引。如果您有一个大表(100k+ 行),则有必要避免查询缓慢。

      【讨论】:

        猜你喜欢
        • 2011-09-01
        • 1970-01-01
        • 2020-02-29
        • 1970-01-01
        • 2015-11-10
        • 2015-11-09
        • 2018-08-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多