PHP函数循环检查DB是否存在现有字符串

时间:2014-06-19 22:19:42

标签: php mysql function loops

我正在尝试对MySQL数据库进行PHP函数检查,如果之前已经随机创建的值存在,如果它确实存在,那么它将重复,直到它产生一个不存在的值。

目前,我已经悲惨地失败了,虽然我认为我的方法可行,但事实并非如此。

PHP

我在脚本中自己尝试了这个,然后意识到php函数不会运行,除非它们被调用。

 conn(); //db connection 
    function genID() {
        $newIDref = uuaig(10);
        $queryCHECK = "SELECT *
                        FROM contentArticle_vids
                         WHERE videoArticle_id = '$newIDref'
                    ";
            $resultCHECK = mysql_query($queryCHECK);
            $numrows = mysql_num_rows($resultCHECK);

        if ($numrows !== 0) {
            genID();
            die();
        }
    }

所以..然后我尝试了这个,然后让它真的不开心(打破了整个页面)。

conn(); //db connection 
genID();

function genID() {
    $newIDref = uuaig(10);
    $queryCHECK = "SELECT *
                    FROM contentArticle_vids
                     WHERE videoArticle_id = '$newIDref'
                ";
        $resultCHECK = mysql_query($queryCHECK);
        $numrows = mysql_num_rows($resultCHECK);

    if ($numrows !== 0) {
        genID();
        die();
    }
        if ($numrows === 0) {
        return $newIDref;
        die();
    }
}

作为参考,随机字符串生成器是uuaig(10)

我最终需要生成随机字符串,然后在数据库中确认该字符串不存在时返回。

我如何进行?

2 个答案:

答案 0 :(得分:2)

为什么要选择?只需在videoArticle_id上​​添加一个唯一索引即可。然后,当您尝试生成并插入新ID时,只需处理插入失败并使用新ID重试。

如果你有一个用于生成id的代码方案并且期望很少的id冲突,那么这将更有效。

所以你的功能可能如下:

function genID() {
    $idSuccess = false;
    $max_retries = 3;
    $i = 1;
    while (false === $idSuccess && $i <= $max_retries) {
        $newIDref = uuaig(10);
        $queryCHECK = "INSERT INTO contentArticle_vids (`videoArticle_id`)
            VALUES ('$newIDref')";
        $idSuccess = mysql_query($queryCHECK);
        $i++;
    }
    if(false === $idSuccess) {
        error_log('Could not generate ID in genID()');
        return false;
    }
    return $newIDref;
}

注意我添加了最大重试限制,因此您没有无限循环可能性。另请注意,这将继续保留数据库表中新的唯一ID的位置。

最后,基本上我必须注意您使用的是已弃用的mysql扩展程序。你真的不应该使用这个扩展来编写新的代码。

答案 1 :(得分:0)

经过一些修修补补后,我设法找到了达到理想结果的正确方法。

//genID();


function genID($newIDref) {
    $status = false;
    $i=0;
    while ($status === false) {
        $newIDref = uuaig(10);
        $queryCHECK = "SELECT *
                        FROM contentArticle_vids
                         WHERE videoArticle_id = '$newIDref'
                    ";
            $resultCHECK = mysql_query($queryCHECK);
            $numrows = mysql_num_rows($resultCHECK);

        if ($numrows === 0) {
            $status = true;
            return $newIDref;
        }

        $i++;

        // testing
        /*
            if ($i > 5) {
                echo 'fin';
                die();
            }
        */  
        // testing
    }
}

$newIDref = genID($newIDref);