生成一个唯一的哈希值,可以在mysql到php中用作主键

时间:2010-03-04 15:29:11

标签: php mysql

我在表格中使用自动增量值。但是有没有其他方法可以在php中生成一个唯一值(足够小而不是GUID或UUID)作为主键插入mysql?

基本上我想获得用作PK的值,但是使用自动增量我想我无法获得下一个自动增量值?

请告诉我一些事情吗?

感谢。

4 个答案:

答案 0 :(得分:1)

您可以获取最后插入的自动增量值。您需要mysql_insert_id功能:

<?php
    mysql_query("INSERT INTO mytable (product) values ('blah')");
    printf("Last inserted record has id %d\n", mysql_insert_id());
?>

让PHP生成散列并将其用作主键的问题在于生成的散列可能(尽管可能很少)是重复键。因此,您必须检查散列是否已被使用,并在不使用之前生成更多。

答案 1 :(得分:1)

您是否尝试过uniqid

答案 2 :(得分:0)

我构建了一个用于生成各种复杂度的随机pwds的函数......

然后用过......

$ ukey = generatePassword(16,2).generatePassword(16,2);

我希望在网址中传递ID并希望难以猜测的内容。您可以将微缩时间连接到随机字符串,以使其独特且难以猜测。我不知道这对商务级应用程序是否足够强大。我使用它进行更多用户帐户管理,不涉及SSN或CCN。

// ----开始功能

function generatePassword($ length = 6,$ level = 2){

list($usec, $sec) = explode(' ', microtime());
srand((float) $sec + ((float) $usec * 100000));

$validchars[1] = "0123456789abcdfghjkmnpqrstvwxyz";
$validchars[2] = "0123456789abcdfghjkmnpqrstvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
$validchars[3] = "0123456789abcdfghjkmnpqrstvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ~!@#$%&*-+";
$validchars[4] = "0123456789abcdfghjkmnpqrstvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ~!@#$%^&*()_-+=/";

$password  = "";
$counter   = 0;

while ($counter < $length) {
    $actChar = substr($validchars[$level], rand(0, strlen($validchars[$level])-1), 1);

    // add current char to pwd string if it's not already in the pwd
    if (!strstr($password, $actChar)) {
        $password .= $actChar;
        $counter++;
    }
}
return $password;

}

答案 3 :(得分:-1)

您可以使用 strtotime 函数

<?php $hash = strtotime(date('Y-m-d H:i:s')).rand(1000,9999);