Dre*_*ave 8 php mysql stack-overflow recursion function
我的MySQL看起来像这样:(表的名称是类别)
'id', 'content', 'parent'
Run Code Online (Sandbox Code Playgroud)
哪里:
这就是我现在正在尝试的:
function remrecurs($id) {
$qlist=mysql_query("SELECT * FROM category WHERE parent='$id'");
if (mysql_num_rows($qlist)>0) {
while($curitem=mysql_fetch_array($qlist)) {
remrecurs($curitem['parent']);
}
}
mysql_query("DELETE FROM category WHERE id='$id'");
}
Run Code Online (Sandbox Code Playgroud)
由于某种原因,它不起作用和崩溃..任何想法我做错了什么?
cod*_*ict 11
问题出在递归调用中:
remrecurs($curitem['parent']);
Run Code Online (Sandbox Code Playgroud)
它应该是:
remrecurs($curitem['id']);
Run Code Online (Sandbox Code Playgroud)
为什么?
您的目标是删除具有给定ID的行.首先你检查它是否有孩子.如果是,则需要再次对不在父级上的每个子级调用递归删除.您再次在父级上递归调用该函数.这会导致无限递归调用,您会崩溃堆栈并崩溃.
或者,您可以让数据库处理此问题.在MySQL中,InnoDBON DELETE CASCADE会自动执行此操作.
CREATE TABLE category (
id INT PRIMARY KEY AUTO_INCREMENT,
parent_id INT NULL,
FOREIGN KEY (parent_id) REFERENCES category (id) ON DELETE CASCADE
) ENGINE=InnoDB
Run Code Online (Sandbox Code Playgroud)
根节点应该具有NULL父节点(而不是0某些人似乎在Adjancency List表上使用).