首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从字符串创建有效的MYSql数据库名称?

问如何从字符串创建有效的MYSql数据库名称?
EN

Stack Overflow用户
提问于 2016-07-09 08:46:56
回答 3查看 287关注 0票数 1

当一个新用户注册时,我希望使用PHP为他们创建一个MySql数据库。

但是,用户名中的一些字符可能不合适(考虑O'reilly)。

如何对用户名进行“消毒”以验证有效的MySql数据库名称?

更新i可以在数据库名称中使用@dognose建议并使用uer Id,从而具有db_1、db_2等。

这当然解决了特殊的字符问题,但它使我比有一个人类可读的名字更容易调试。

不过不算太多。解决了重复名字的问题。

其他人是怎么做的?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-07-09 09:44:01

我建议你采取另一种方法。首先,您可以对用户输入进行消毒,如

代码语言:javascript
复制
$username = preg_replace("/[^a-zA-Z]+/", "", $username);

然后,您可以附加提供的base64编码电子邮件和lastinert id。电子邮件是独一无二的,所以不需要。看起来就像

代码语言:javascript
复制
$userdb = $username.'_'.base64_encode($email).'_'.($db->lastInsertId());

你会得到这样的东西,它将永远是独一无二的

代码语言:javascript
复制
smith_YWRtaW5AYWRtaW4uY29t_234

编辑说明:

在某些base64编码字符串中,您可能在结尾处得到=或==符号。为了避免这种情况,你可以这样做

$email = strtr(rtrim(base64_encode($email), '='), '+/', '-_');,然后可以创建数据库。

请注意,要解码这封电子邮件,您将需要这个

代码语言:javascript
复制
$email = base64_decode(strtr($encodedemail, '-_', '+/'));
票数 1
EN

Stack Overflow用户

发布于 2016-07-09 10:37:29

正如我在评论中所建议的那样,使用database_{userid}是最简单和最“节省”的方式。

要生成更容易阅读的db名称,可以将上述两种方法结合起来:

1.)首先,从用户名中删除任何特殊字符,用"_“替换它们。(为了可读性)。

2.)在末尾添加实际ID,用下划线分隔(以确保唯一性):

代码语言:javascript
复制
id | username | dbname
1    Bob$       bob__1
2    Bob§       bob__2
3    JohnX      johnx_3      
4    ABC        abc_4
5    Test       test_5

但请记住,这将导致不同的数据库排序-列表-如果有冲突的“用户名”,您必须查找id,以找到正确的"Bob“。

侧节点:取决于您所提供的服务类型:也许您应该更喜欢多租户数据库而不是多个数据库?

票数 1
EN

Stack Overflow用户

发布于 2016-07-09 08:55:13

为什么你不想让这些角色出现在你的名字里?

您不必对输入进行清理,而是不允许在SQL语句中使用这些数据。例如,使用prepared statements (MySQLi、PDO等)。

编辑:

但是,如果您仍然希望对用户名进行“消毒”并删除这些字符,请按注释中提到的那样重新整理它们:

代码语言:javascript
复制
'/[^a-z_\-0-9]/i'
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38280028

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档