Php 是否可以将客户的用户名id替换为他们的电子邮件?

Php 是否可以将客户的用户名id替换为他们的电子邮件?,php,mysql,Php,Mysql,我想用他们的电子邮件替换用户名id。这样可以吗 例如,在MySQL表中: client_id som665 som881 som876 som887 我想用未来客户的电子邮件代替它们,例如: client_id som665 som881 som876 som887 xyz123@gmail.com xyy333@gmail.com xcv5557@yahoo.com 问题:- 用电子邮件替换client_id如som881是否会使我的软件(或查询)变慢?当我在电子邮件上使用下面的查询而不是

我想用他们的电子邮件替换用户名id。这样可以吗

例如,在MySQL表中:

client_id
som665
som881
som876
som887
我想用未来客户的电子邮件代替它们,例如:

client_id
som665
som881
som876
som887
xyz123@gmail.com
xyy333@gmail.com
xcv5557@yahoo.com
问题:- 用电子邮件替换
client_id
som881
是否会使我的软件(或查询)变慢?当我在电子邮件上使用下面的查询而不是像
som881
这样的小id时

$sel_service = "select * from all_services where client_id='$client_id' order by sub_cat_name"

现在,我的客户使用客户id登录,如
som881
,与电子邮件地址相比,这对他们来说很难记住。我也无法提供“忘记密码”功能。

这是电子邮件的一个很好的用途,因为公司的邮件服务器不允许客户端使用相同的用户名,所以您甚至不需要在这个id字段上设置主键约束。 您知道,如今数据库通过人工智能找到了在记录之间搜索的最佳算法,因此您唯一需要担心的是: 以牺牲复杂性为代价为客户提供舒适性是否值得

如果是的话,在我看来,如果服务器响应稍微慢一点,就不会有任何问题



我建议您至少使用一个安全服务器服务层,在客户端和数据库服务器之间使用预创建的类,这些类接受客户端连接并创建到数据库服务器的单向虚拟连接,用于搜索登录信息,而不是显式SQL命令,以提供更高级别的安全性并拒绝SQLInjection

这是电子邮件的一个很好的用途,因为公司的邮件服务器不允许客户端使用相同的用户名,所以您甚至不需要在这个id字段上设置主键约束。 您知道,如今数据库通过人工智能找到了在记录之间搜索的最佳算法,因此您唯一需要担心的是: 以牺牲复杂性为代价为客户提供舒适性是否值得

如果是的话,在我看来,如果服务器响应稍微慢一点,就不会有任何问题



我建议您至少使用一个安全服务器服务层,在客户端和数据库服务器之间使用预创建的类,这些类接受客户端连接并创建到数据库服务器的单向虚拟连接,用于搜索登录信息,而不是显式SQL命令,以提供更高级别的安全性并拒绝SQLInjection

字符串越长,查询用户所需的时间就越长,因为它将匹配更多的字符,
因此,如果你想让它与电子邮件(是的,它更容易为用户)。 必须将此字段作为唯一索引。
通过这种方式,mysql将对电子邮件进行索引,并在不扫描整个表的情况下查找用户记录。
但是它的缺点是它会占用更多的索引空间。但是会很快


如果用户的记录多于(服务多于),则必须使其索引不唯一

字符串越长,查询用户所需的时间越长,因为它将匹配更多的字符,
因此,如果你想让它与电子邮件(是的,它更容易为用户)。 必须将此字段作为唯一索引。
通过这种方式,mysql将对电子邮件进行索引,并在不扫描整个表的情况下查找用户记录。
但是它的缺点是它会占用更多的索引空间。但是会很快


如果用户拥有的记录多于个(服务多于个),那么您必须使其索引不是唯一的

总体而言,您的问题非常广泛,没有您正在使用的应用程序的详细信息

我想说,一般来说,是的,允许用户使用电子邮件地址登录是个好主意。如果你主要关心的是经济放缓,这不应该是一个问题,因为这只会影响登录,而登录并不经常发生

从设计角度来看,用户可能应该有两个标识符:

  • 用户可见令牌。这可以是用户(user123)选择的用户名或电子邮件地址(user123@example.com). 此令牌仅在用户登录到应用程序时使用

    您甚至可以使用两个不同的列来存储用户名和电子邮件地址。在这种情况下,您的登录部分需要根据两个数据库列匹配用户名
  • 应用程序中使用的内部标识符<代码>id INT主键自动增量列可能会很好,具体取决于您的预期比例。这是应用程序应该在内部使用的内容。你甚至不需要向用户展示这个
  • 这将允许用户更改其电子邮件地址,而无需重新创建帐户

    编辑:根据您的评论,您使用
    client\u id
    作为索引值引用数据库中表之间的数据,并作为用户登录的用户名。我的建议是按照上面列出的标准化数据


    如果不规范化数据,可能会导致多个表中的索引列过大。要存储电子邮件地址,您需要使用有效长度的字符串(
    CHAR
    VARCHAR
    )列。对于规范化数据,您只需在每个表中输入
    INT
    /
    BIGINT
    。在这种情况下,允许用户使用电子邮件地址可能会减慢速度,因为它可能需要调整
    客户id
    列的大小。

    总体而言,您的问题非常广泛,没有您正在使用的应用程序的详细信息

    我想说,一般来说,是的,允许用户使用电子邮件地址登录是个好主意。如果你主要关心的是经济放缓,这不应该是一个问题,因为这只会影响登录,而登录并不经常发生

    从设计角度来看,用户可能应该有两个标识符:

  • 用户可见令牌。这可以是用户(user123)选择的用户名或电子邮件地址(user123@example.com). 此令牌仅在用户登录应用程序时使用