然而,非常简单,我还没有找到一个真正直接和适当的解决方案;
我目前有自己的函数创建一个随机字符串,通过运行两个mt_rand()
函数从1到最大整数,然后将结果包装在两个dechex()
函数中,并将它们连接成一个单串。
我还没有完成统计数据,但是,其中两个字符串相同的可能性非常低。
但是,我显然需要一个备份解决方案,这就是为什么我想对数据库执行查询,并查看它是否作为条目存在,如果存在,重新调用我自己的函数来创建随机字符串,再次查询,循环,直到找到不存在的字符串。
我已经看过很多论坛帖子和一些SO问题,但还没有找到一个简明的答案。
非常感谢任何帮助,谢谢!
答案 0 :(得分:1)
$int_affected = 0;
while(!$int_affected) {
/* Set $integer */
mysql_query("INSERT IGNORE INTO table (value) VALUES ({$integer})");
$int_affected = mysql_affected_rows();
}
这是你要找的东西吗?
答案 1 :(得分:0)
这不是最优雅的解决方案,但它会起作用:
$result = queryForUnique();
$unique_string = your_described_function();
$how_many_times = 0;
while(in_array($unique_string, $result) !== false){
if($how_many_times > 10){
throw new Exception("Failed to find a unique string! Aborting!");
}
$unique_string = your_described_function();
$how_many_times++;
}
其中queryForUnique($string)
是SELECT语句的包装器
修改:
从循环中取出查询,在循环中进行SELECT查询是不好的做法。
<小时/> 可能想要检查您的控制结构:
答案 2 :(得分:0)
你需要一个递归函数。类似的东西:
function makeString() {
// Create our random string
$string = "";
$characters = array('a', 'b', 'c', 'd');
for ($i = 0; $i < 4; $i++) {
$string .= $characters[mt_rand(0, 4)];
}
$query = "SELECT COUNT(*)
FROM myTable
WHERE string = '{$string}'";
$result = mysql_query($query);
$row = mysql_fetch_assoc($result);
if ($row['COUNT(*)'] > 0) { // if it already exists, do it again
$string = makeString();
}
return $string;
}