我在表格中使用自动增量值。但是有没有其他方法可以在php中生成一个唯一值(足够小而不是GUID或UUID)作为主键插入mysql?
基本上我想获得用作PK的值,但是使用自动增量我想我无法获得下一个自动增量值?
请告诉我一些事情吗?
感谢。
答案 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);