PHP递归查询脚本

时间:2014-04-28 13:47:10

标签: php function recursion

我想创建一个递归查询脚本,输出ID_Col2,它将用作下一个递归查询的参数。这里我的代码实际上只在第一个周期停止:

function recursiveQuery ( $ID, $numRows ) {                                         
  for($i=0;$i<=$numRows;$i++) {                                         
    $dbConnect = new MySqlConnect();
    $dbConnect->connect();      
    $query = $dbConnect->query("SELECT ID_Col1, ID_Col2 FROM wbs WHERE ID_Col1 = '" . $ID . "' AND ID_Col2 != '0' ORDER BY ID ASC");
    $n = mysql_num_rows($query);
    $result = $dbConnect->extractObject($query);    

    for($x=0;$x<count($result);$x++){
      $r = $result[$x]->ID_Col2;
      echo $r . '<br>';
      return recursiveQuery( $r, $n );
    }

    $dbConnect->disconnect();                                               
  }
}

echo recursiveQuery( '6765', '25' );

那么我应该如何修改这个脚本以使其有效呢?

2 个答案:

答案 0 :(得分:1)

以递归方式打开数据库连接...:

function recursiveQuery ( $ID, $numRows ) {
  $dbConnect = new MySqlConnect();
  $dbConnect->connect();   

  for($i=0;$i<=$numRows;$i++) {
    // [...]    

    for($x=0; $x < count($result); $x++){
      // [...]
      return recursiveQuery( $r, $n );
    }

    $dbConnect->disconnect();                                               
  }
}

我无法告诉你如何让它发挥作用,因为它不起作用。

您应该在代码的递归部分之外打开/关闭连接。


修改

正确的代码:

function recursiveQuery ( $ID, $numRows, $dbConnect ) {
  for($i=0;$i<=$numRows;$i++) {
    // [...]    

    for($x=0; $x < count($result); $x++){
      // [...]
      // here you don't want to return but just to execute :
      recursiveQuery( $r, $n, dbConnect);
    }                                             
  }
}

function wrapFunc($ID,$numRows) {
  $dbConnect = new MySqlConnect();
  $dbConnect->connect();
  // nothing is returned by your function (echos directly in the code)
  recursiveQuery ( $ID, $numRows, $dbConnect);
  $dbConnect->disconnect();
}

wrapFunc('6765','25');

答案 1 :(得分:0)

我在这里找到了最好的答案:http://www.sitepoint.com/hierarchical-data-database/