我想创建一个递归查询脚本,输出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' );
那么我应该如何修改这个脚本以使其有效呢?
答案 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/