如果数据库中已存在,则INSERT

时间:2016-05-29 12:05:04

标签: php recursion mysqli

我创建了一个查找特定列中所有行(记录)的函数,  生成一个随机数,然后检查它是否已经存在该列,如果生成的随机数存在则重启该函数(递归) 如果它不存在则将其插入为新的。

$verifs = mysqli_query($conlink, 'SELECT verif FROM memebers');
$records = array();
while($record = mysqli_fetch_array($verifs,MYSQLI_NUM)) {
    $records[] = $record[0];
}
function randomize(){
    $rand= rand(1,5);
    if(in_array($rand, $GLOBALS['records'])){
        randomize();
    }else{
        return $rand;
    }
}
mysqli_query($conlink, "INSERT INTO `memebers`(`verif`) VALUES (".randomize().")");

我希望每次刷新我的php页面时都必须添加一个数字 情况确实如此,但当我达到3或4条记录时,刷新页面并不能添加任何记录!所以return语句必须阻止函数递归。 我的逻辑有什么不对吗? 感谢

1 个答案:

答案 0 :(得分:1)

在我看来,您没有正确使用回调函数。如果您不知道,当您在函数中使用函数时,您实际上必须在参数内传递该函数。在参数中具有函数的函数称为回调函数,您可以在以下帖子中阅读有关它们的更多信息:What is a callback function and how do I use it with OOP

然后我会将您的randomize函数更改为以下代码:

function randomize($callbackRandomize){
    $rand= rand(1,5);
    if(in_array($rand, $GLOBALS['records'])){
        return $callbackRandomize($callbackRandomize);
    }else{
        return $rand;
    }
}

并将最后一行代码更改为:

mysqli_query($conlink, "INSERT INTO `memebers`(`verif`) VALUES (".randomize('randomize').")");

如果这对您有用,请告诉我。