检查创建的字符串对数据库,如果找到,创建新的字符串?

时间:2011-08-01 20:48:48

标签: php mysql

然而,非常简单,我还没有找到一个真正直接和适当的解决方案;

我目前有自己的函数创建一个随机字符串,通过运行两个mt_rand()函数从1到最大整数,然后将结果包装在两个dechex()函数中,并将它们连接成一个单串。

我还没有完成统计数据,但是,其中两个字符串相同的可能性非常低。

但是,我显然需要一个备份解决方案,这就是为什么我想对数据库执行查询,并查看它是否作为条目存在,如果存在,重新调用我自己的函数来创建随机字符串,再次查询,循环,直到找到不存在的字符串。

我已经看过很多论坛帖子和一些SO问题,但还没有找到一个简明的答案。

非常感谢任何帮助,谢谢!

3 个答案:

答案 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查询是不好的做法。

<小时/> 可能想要检查您的控制结构:
http://php.net/manual/en/language.control-structures.php

答案 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;
}