PHP rekursive Funktion zum Löschen aller untergeordneten Knoten verursacht stackoverflow

8

Mein MySQL sieht so aus: (Der Name der Tabelle ist Kategorie)

%Vor%

wo:

  • id = die ID der Kategorie
  • Inhalt = Some-Text-We-Dont-Care-about
  • parent = die ID des übergeordneten Elements Kategorie

Das ist es, was ich gerade versuche:

%Vor%

Was aus irgendeinem Grund nicht funktioniert und abstürzt .. Irgendeine Idee, was ich falsch mache?

    
DreamWave 21.10.2010, 09:16
quelle

2 Antworten

11

Das Problem liegt im rekursiven Aufruf:

%Vor%

sollte es sein:

%Vor%

Warum?

Ihr Ziel ist es, die Zeile mit der angegebenen ID zu löschen. Zuerst überprüfen Sie, ob es Kinder hat. Wenn ja, müssen Sie das rekursive Löschen für jedes der untergeordneten Elemente erneut auf dem übergeordneten Element aufrufen. Sie rufen die Funktion rekursiv erneut auf dem Elternobjekt auf. Dies führt zu unendlichen rekursiven Aufrufen, Sie schlagen den Stapel und stürzen ab.

    
codaddict 21.10.2010, 09:20
quelle
5

Alternativ könnten Sie die Datenbank damit umgehen lassen. In MySQL führt dies automatisch eine InnoDB ON DELETE CASCADE aus .

%Vor%

Wurzelknoten sollten NULL als übergeordnetes Element haben (nicht 0 , wie einige Leute in Adjacency List-Tabellen zu verwenden scheinen).

    
Wrikken 21.10.2010 10:59
quelle