[MySQL 4.0] skript hängt bei einfachen delete-befehlen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [MySQL 4.0] skript hängt bei einfachen delete-befehlen

    Ich hätte mal gerne folgendes problem:

    einfache DELETE-befehle dauern mehrere minuten, die CPU-auslastung steigt auf 100%, der taskmanager sagt mir, apache ist mit mind. 97% dabei.

    Es liegt nicht an meinem server:
    Wenn ich das skript auf einem hosteurope-webspace ausführe, kommt der 'fatal error maximum execution time exeeded'. Die Delete-befehle selbst sind aber offenbar alle ausgeführt worden. Die Einträge existieren danach nicht mehr.

    Es liegt nicht an der DB-größe:
    Die DB ist winzig, nur zum testen, die tabellen bestehen aus c.a zwei dutzend datensätzen.

    Wenn ich diesselben befehle im sql-monitor (oder, ehrlich gesagt, im sql-front) eingebe, werden sie in sekundenbruchteilen ausgeführt.

    Und noch etwas seltsames: Während der minutenlangen ausführungszeit, habe ich ja zeit, die sache mit mysql-front zu beobachten, und:
    Die delete-befehle werden sofort ausgeführt, aber das skript hängt lange rum und apache treibt die cpu-auslastung auf 100%.

    Hier das skript-schnippsel:

    function delete_zs($zsID) {
    $result=mysql_query("DELETE FROM personenzs WHERE id=$zsID") or die(mysql_error());
    $result=mysql_query("DELETE FROM personengruppenzs WHERE personenID=$zsID") or die(mysql_error());
    $result=mysql_query("DELETE FROM adressenbapersonen WHERE personenID=$zsID") or die(mysql_error());
    return;
    }

    Also, nix ausgefuchstes. Eine sehr ähnliche funktion:

    function delete_ba( $index) {
    $result=mysql_query("DELETE FROM adressenba WHERE id=$index") or die(mysql_error());
    $result=mysql_query("DELETE FROM adressengruppenba WHERE adressenID=$index") or die(mysql_error());
    $result=mysql_query("DELETE FROM adressenbapersonen WHERE adressenbaID=$index") or die(mysql_error());
    }

    wird hingegen sofort und ohne probleme ausgeführt.

    Was könnte das sein? Wo könnte ich suchen?

  • #2
    Die Funktionen sind bis auf das verlorene return völlig in Ordnung. Nimm das raus oder gib true zurück.

    Die Symptome deuten auf eine Endlosschleife hin. Nach dem Aufruf von delete_zs() irgenwas schleifenartiges? Oder rundherum?

    Kommentar


    • #3
      Das return war ursprünglich nicht drin. War ein versuch von mir. Die symptome sind mit 'return', 'return TRUE' oder ganz ohne 'return' genau die gleichen.


      Aufgerufen wird die funktion :

      require("config.php");

      $verbindung = mysql_connect($HOSTNAME, $USERNAME, $PASSWORT);
      mysql_select_db($DATABASE, $verbindung);


      if(isset($_GET['delete'])) {
      delete_zs($_GET['delete']);
      header( 'Location:showba.php?adressenID='.$_GET['adressenID']);
      }

      Also, eigentlich nur ein 5-zeilen-skript, wenn 'delete' übergeben wird.

      Jetzt hab ich grad mal testhalber den header-befehl rausgenommen... und es passiert immernoch das gleiche... äußerst erstaunlich...

      Kommentar


      • #4
        So:

        Wenn ich nach dem header-befehl ein exit() einfüge, dann läufts.

        if(isset($_GET['delete'])) {
        delete_zs($_GET['delete']);
        header( 'Location:showba.php?adressenID='.$_GET['adressenID']);
        exit();
        }


        Weiß jemand, warum das nötig ist?
        Oder... ist das normal, dass man das macht, bzw machen soll?

        Immerhin hast du mich drauf gebracht, nicht betriebsblind auf die funktion zu starren, sondern zu schauen, was danach kommt. danke.

        Kommentar


        • #5
          Bei Location-Headern sollte man das machen und außerdem sollte man auch eine absolute URI angeben.

          Kommentar


          • #6
            Original geschrieben von Cyrano60
            Wenn ich nach dem header-befehl ein exit() einfüge, dann läufts. [...]Weiß jemand, warum das nötig ist?
            Ich verstehe nicht, wie jemand auf die Idee kommen kann, dass es nicht nötig sein könnte, wenn man die Befehle nach header() nicht mehr ausführen will.

            Wenn du glaubst, header() würde den Scriptablauf in irgendeiner Weise beeinflussen, liegst du falsch.
            I don't believe in rebirth. Actually, I never did in my whole lives.

            Kommentar

            Lädt...
            X