PHP递归函数问题

时间:2013-11-16 21:14:33

标签: php mysql

我遇到getNext()函数问题...

如果isTaken() == true,它会更新last,但我不确定它是否正在调用getNext()函数,因为函数永远不会返回$next

如果isTaken() == false,则返回$next

有什么想法吗?

function isTaken ($id){
  $sql = "SELECT asset_no FROM tb_asset WHERE asset_no='" . $id . "'";
  $result = mysql_query($sql) or die(mysql_Error());
  if (mysql_num_rows($result)) return true;
  else return false;  
  mysql_free_result($result);
}


function getNext(){
  $sql = "SELECT last FROM app_asset";
  $result = mysql_query($sql) or die (mysql_error());
  $last = mysql_fetch_array($result);
  mysql_free_result($result);

  $next = ++$last['last'];

  if (isTaken($next)){
    $sql = "UPDATE app_asset SET last='" . $next . "'";
    mysql_query($sql) or die (mysql_error());
    getNext();
  } else {  
    return $next;
  }
}

2 个答案:

答案 0 :(得分:1)

正如Sable Foste指出的那样,你总是需要一份回复声明。但是,在您的情况下,您的代码似乎需要修改为

if (isTaken($next)){
    //code
    return getNext();
} else
    return $next;

因此该函数将停止递归并在isTaken($next)为假时返回

答案 1 :(得分:0)

您需要将变量传递回函数:

  if (isTaken($next)){
    $sql = "UPDATE app_asset SET last='" . $next . "'";
    mysql_query($sql) or die (mysql_error());
    getNext();
    return $next; // this line added.
  } else {  
    return $next;
  }