php - 非主要领域的独特值(value)

标签 php mysql md5 unique

我正在使用 php 生成一个随机的 10 个字符的字符串,并将其插入到我的数据库中的一列中。我的问题是我希望这个字符串是唯一的(在数据库中)。我想了很多方法来做到这一点,但想知道哪种方法最有效。

我的 PHP 看起来像这样(随机字符串只能是 10 个字符长):

 //generates an almost unique(not quite) ticket number
 $pretrimmedtask = md5(uniqid(mt_rand(),true));
 $tasknum =  substr($pretrimmedtask ,0,10);

然后我获取这个“唯一”值并将其插入。但由于字符串的修剪,该值绝不是唯一的。我想知道确保该值永远不会重复且仍然高效的最佳方法是什么。

(我知道查询数据库以查找该值是可能的......但我宁愿以更优雅的方式进行)

最佳答案

您应该更新表并使相关列成为UNIQUE KEY,然后尝试插入生成的字符串,如果没有插入行,则生成另一个键并重试。

ALTER TABLE table_name ADD UNIQUE KEY (column_name);

下面的代码将尝试将新行INSERT插入table1,如果无法,它将使用不同的随机生成的$key重试.

IE。如果 col2 具有唯一键约束并且 $key 的值已存在于该列中,则查询将不会成功。

function generate_random_string () {
  $charset = array_merge (
    range ('a', 'z'), range ('A','Z'), range ('0','0')
  );

  shuffle ($charset);

  return join ('', array_slice ($charset, 0, 9));
}

/* ....................................................... */

do {
  $key = generate_random_string ();
} while (
  !mysql_query ("INSERT INTO table1 (col1,col2) VALUES (123, '$key')")
);

您当然可以使用自己的算法来生成随机字符串。

注意:确保查询有可能成功,这样您就不会陷入无限循环。

关于php - 非主要领域的独特值(value),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8510640/

相关文章:

php - 复杂的字符串比较

php - 如何从 PHP 文件中的 jQuery.getJSON 获取数据传输的数据?

java - Java 和 MYSQL 中的垂直制表符

mysql - 如何设计和优化网站的数据库,以便为每个链接提供多个图像功能

tomcat - 如何为 Tomcat JDBCRealm 准备摘要密码?

hash - 两个不同的字符串可以生成相同的MD5哈希码吗?

php - 如何使用mysql自动获取字符串中的重要单词

php - 在右侧对齐图像

Mysql 更新表,同一个表内有多个子查询

javascript - NodeJS md5 'bytestring' 类似于 PHP md5(str, true)