我有以下數據的數據庫表:這個PHP遞歸函數有什麼問題?
categoryId categoryName parentCategory
men Men root
women Women root
shoes Shoes root
mensshirts Men's Shirts men
menspants Men's Pants men
mensjeans Men's Jeans men
mensvests Men's Vests men
womensshirts Women's Shirts women
womenpants Women's Pants women
我使用遞歸函數來打印出一個分層菜單。代碼如下。
function display_children($parent) {
global $connect;
$query = "SELECT categoryId, categoryName FROM categories WHERE parentCategory='$parent'";
$result = mysqli_query($connect,$query);
if ($result === false) {
printf("Query Error: %s\n", mysqli_error($connect));
exit();
}
echo "<ul>";
while ($row = mysqli_fetch_assoc($result)) {
extract($row);
echo "<li>".$categoryName."</li>";
display_children($categoryId);
}
echo "</ul>";
mysqli_close($connect);
}
display_children('root');
其結果是,我得到這個打印屏幕上:
- 男性
- 男式襯衫
- 男裝褲
- 男式牛仔褲
- 男士背心
名
- 女性
- 鞋
的遞歸函數不打印出來的subcats的休息,我不知道爲什麼。我的測試/調試已經證實,在mensvests作爲categoryId傳入函數之後,下一個傳遞給categoryId的是women,它應該定位最後一個subcats。有任何想法嗎?
你需要逃避你的變量,否則你很容易出現安全風險和黑客行爲。 –
您是否嘗試過調試? – SergeS
爲什麼使用'extract()'的時候可以使用'$ row ['categoryName']'? – Spudley