在PHP上重复增加一个ID

时间:2018-12-13 04:43:17

标签: php mysqli

当前,我正在创建一个注释系统,有时我必须验证将插入数据库中的ID是否存在。如果不存在,则返回,否则,再次生成。

这是我的功能:

function checkId($n) {
    global $mysqli;
    $query = mysqli_query($mysqli, "SELECT id FROM comments WHERE id = ".$n.""); //line error
    if (!$query) {
        die('Error: ' . mysqli_error($mysqli));
    }
    if(mysqli_num_rows($query) > 0){
        checkId($n++);
        return;
    } else {
        return $n;
    }
}

可能您会告诉我使用AUTO_INCREMENT,但是在这种情况下我无法执行。 错误是:Fatal error: Maximum function nesting level of '100' reached, aborting!

我已经尝试过自己修复它,但是我无法解决,您能帮我吗?谢谢。

1 个答案:

答案 0 :(得分:1)

尝试这个简单的练习:在checkId函数内添加一个echo / print语句,该语句将打印$ n的值...您应注意,$ n的值将是连续发生100次,直到发生致命错误。

原因:在表达式checkId($n++)中,您将++用作“后缀增量”运算符。这意味着,$n变量仅在调用嵌套的checkId(...)函数之后 递增。基本上是这样:

checkId($n++)

...只是这个的简写:

checkId($n)
$n = $n + 1

checkId的第二次调用(具有相同的$n值)将最终调用checkId($n++),这将触发 third 并使用完全相同的$n值进行调用,然后一直执行直到PHP说“这太多了”,并因“致命错误”而崩溃……这是“堆栈溢出”错误,由方式:P

相反,使用prefix increment表达式checkId(++$n)或诸如checkId($n + 1)之类的简单表达式。 或者更好,通过一次对mysqli_query的调用来弄清楚如何完成工作(顺便说一句,这是一个独立的问题)。认为您可以查询很多次,直到找到正确的东西,这意味着如果/当有很多人使用它时,您的应用程序将不会具有可伸缩性。 只要让数据库来完成繁重的工作即可。:)