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

时间:2016-07-09 08:46:57

标签: php mysql

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

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

如何“清理”用户名以获取有效的MySql数据库名称?

[更新]我可以使用@dognose建议并在数据库名称中使用您的Id,因此havonf db_1db_2

这肯定解决了这个特殊字符的问题,但是这让我调试起来比使用一个人类可读的名字更加困难。

但是,并不是太多。它解决了重复名称问题。

其他人做了什么?

3 个答案:

答案 0 :(得分:1)

我建议你采取不同的方法。首先,您可以清理用户输入,如

$username = preg_replace("/[^a-zA-Z]+/", "", $username);

然后你可以附加提供的base64编码电子邮件和lastinert id。电子邮件是独特的,所以没有必要。它看起来像

$userdb = $username.'_'.base64_encode($email).'_'.($db->lastInsertId());

你会得到类似的东西,这将永远是唯一的

smith_YWRtaW5AYWRtaW4uY29t_234

编辑注:

在某些base64编码字符串中,最后可能会得到=或==符号。为了避免这种情况,你可以做这样的事情

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

请注意,要解码该电子邮件,您需要此

$email = base64_decode(strtr($encodedemail, '-_', '+/'));

答案 1 :(得分:1)

正如我在评论中提出的那样,使用database_{userid}是最容易和最“最”的方式。

为了生成更易于阅读的db-names,您可以结合使用的两种方法:

1。)首先,从用户名中删除任何特殊字符,将其替换为“_”。 (为了便于阅读)。

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

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”。

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

答案 2 :(得分:0)

为什么你不想在名字中使用这些字符?

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

修改

但是,如果您仍想“清理”用户名并删除这些字符,请按照评论中的说明将它们排除

'/[^a-z_\-0-9]/i'