相关疑难解决方法(0)

PHP/MySQL - 创建唯一随机字符串的最佳方法?

如何在MySQL中创建随机唯一字符串?

当我需要在PHP中创建一个随机字符串时,我使用此函数:

public function generateString($length)
{   
    $charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";

    for($i=0; $i<$length; $i++) 
        $key .= $charset[(mt_rand(0,(strlen($charset)-1)))]; 

    return $key;
}
Run Code Online (Sandbox Code Playgroud)

然后我将获取生成的字符串并将其存储在MySQL数据库中.

确保生成的随机字符串对于为数据库中的其他条目创建的所有其他随机字符串是唯一的最佳方法是什么?

也许是这样的?

while(++$i < 100)
{
  //query db with random key to see if there is a match

  //if no match found break out of loop
  break;

}
Run Code Online (Sandbox Code Playgroud)

这看起来很乱,很长,我可能会多次打到数据库.如何快速确定我的新随机字符串是否唯一?

php mysql

25
推荐指数
2
解决办法
4万
查看次数

如何为我的一个MySql表列生成唯一的随机字符串?

我正在使用MySql 5.5.37.我有一个包含以下列的表

+------------------+------------------+------+-----+---------+-------+
| Field            | Type             | Null | Key | Default | Extra |
+------------------+------------------+------+-----+---------+-------+
| ID               | varchar(32)      | NO   | PRI | NULL    |       |
| CODE             | varchar(6)       | NO   | UNI | NULL    |       |
Run Code Online (Sandbox Code Playgroud)

代码列是唯一的,我的ID列是GUID.根据上表中的某些条件(例如WHERE COLUMN1 = 0),我想要更新多行.如何为我的CODE列生成随机的,唯一的6个字符的代码(理想情况是字母和数字),以便它们不违反我表中的唯一约束?请注意,表中不符合条件的列(例如,其中COLUMN1 <> 0)已经具有CODE列的唯一值.

编辑:这与这个问题不同 - 使用MySQL生成随机和唯一的8个字符串,因为该链接处理ID taht是数字.我的ID是32个字符的字符串.此外,他们的解决方案没有考虑在运行我想要运行的语句之前表中可能有值的事实,这将为相关列生成唯一值.

mysql random constraints unique sql-update

17
推荐指数
1
解决办法
3万
查看次数

使用mysql/sql对字符串进行随机播放

我想知道,如果有一些方法可以在mysql/sql中改变字符串的字母,就像伪代码那样:SELECT SHUFFLE('abcdef')

找不到http://dev.mysql.com/doc/refman/5.0/en/string-functions.html中的任何内容,并且搜索它似乎找到了洗牌结果的解决方案,而不是字符串.

mysql sql string random

6
推荐指数
2
解决办法
5512
查看次数

MySQL-有效插入70000个随机唯一字符串

我正在做一个项目,在该项目中,我应该至少生成70000个包含8个字母数字字符的代码。密码必须唯一。目前,我正在使用php通过以下功能生成这些代码:

function random_unique_serial($length, PDO $conn) {
    $codeCheck=FALSE;
    while (!$codeCheck) {
        $characters = '0123456789abcdefghijklmnopqrstuvwxyz';
        $charactersLength = strlen($characters);
        $randomCode = '';
        for ($i = 0; $i < $length; $i++) {
            $randomCode .= $characters[rand(0, $charactersLength - 1)];
        }
        $sql = "SELECT * FROM codes WHERE code=:code";
        $st = $conn->prepare($sql);
        $st->bindvalue(":code", $randomCode, PDO::PARAM_STR);
        $st->execute();
        $count = $st->rowcount();
        if ($count==0) {
            $codeCheck=TRUE;
        } else {
            $codeCheck=FALSE;
        }
    }
    return $randomCode;
}
Run Code Online (Sandbox Code Playgroud)

如您所见,此代码检查数据库中是否生成了每个代码,以确保它不是重复的。这在理论上应该起作用。但是,这非常慢,并且导致请求超时。我尝试增加执行时间,但这也无济于事。

然后,我决定使用数据库端方法并使用此解决方案: 使用MySQL生成随机且唯一的8个字符串

这也非常慢,并且某些生成的代码长度少于8个字符。

您能否提出更好的解决方案?

php mysql random

3
推荐指数
1
解决办法
1076
查看次数

标签 统计

mysql ×4

random ×3

php ×2

constraints ×1

sql ×1

sql-update ×1

string ×1

unique ×1