Martin Rozmus: /PHP: Fehlerausgabe, obwohl kein Fehler vorhanden

Moin!

Mit folgender Funktion lösche ich Personen mit zuvor übergebenen IDs -Prim. Schlüssel- (hier: $arr_lfd) aus der Tabelle 'personen' und zusätlich die zu der jeweiligen ID gehörenden Einträge in abhängigen Tabellen.
Die abhängigen Tablellen, die Spalte mit dem "Sekundärschlüssel", sowie die Tabelle 'personen' und die Spalte mit den Primärschlüsseln (hier:lfd) sind in dem Array $arr_tab gespeichert.

Wenn der DELETE Aufruf erfolgreich war, wird das mit einem Hinweis bestätigt, scheitert er, wird ebenfalls ein Hinweis ausgegeben mit dem SQL String und der Fehlermeldung der DB - und zwar für jeden DELETE - Vorgang.

Nun zu meinem Problem:
Jedes mal, wenn die Funktion aufgerufen wird, erscheinen die Hinweismeldungen, dass etwas schief gelaufen ist. Wenn ich mir jedoch die Tabellen nach der Löschung anschaue, hat alles funktionier.

Hier als Beispiel ein SQL String und die dazugehörige Fehlermeldung nur für eine Tabelle:

SQL: DELETE FROM chron_status WHERE fk_personen = 44
FEHLER: You have an error in your SQL syntax near '1' at line 1

Es verhält sich so bei allen Tabellen. Außer des Wertes für fk_personen (bzw. lfd) ändert sich bei der SQL-, Fehlerausgabe nichts.

Die Funktion ist im "Anhang" zu finden.

Für Tipps und Anregungen bin ich sehr Dankbar.

Gruss Martin
-------------------------------------------------------
FUNKTION:

function personen_loeschen($arr_lfd){
 $db = mySQL_ini();
     //Array 2 Dim, speichert Tabellen und das relevante Feld für die Löschung
     $arr_tab = array(
         array("chron_status","fk_personen"),
                         array("chron_personengruppe","fk_personen"),
                         array("kontakt_privat","fk_personen"),
                         array("personen","lfd")
         );
 foreach($arr_lfd AS $p_lfd){
  for($i=0;$i<count($arr_tab);$i++){
               $sql="DELETE FROM ".$arr_tab[$i][0]." WHERE ".$arr_tab[$i][1]." = ".$p_lfd;
               $result = mysql_query($sql,$db);
               if (@mysql_query($result)){
     ?>
                    <p>
                         Daten des Benutzers mit Lfd.: <? echo $p_lfd ?>
                         aus der Tabelle '<? echo $arr_tab[$i][0] ?>' entfernt.
                    </p>
     <?
               }else{
     ?>
                    <p style="border:1px solid #000000; padding:3px">
                         Daten des Benutzers mit der Lfd.: <? echo $p_lfd ?>
                         konnten aus der Tabelle '<? echo $arr_tab[$i][0] ?>' <b>NICHT</b>
                         gelöscht werden!!!<br>
                         Kopiere die folgenden Meldungen und schicke sie an deinen
                         Administrator:
                         <div style="border:1px solid red; padding:3px">
                         SQL: <? echo $sql ?> <br> FEHLER: <? echo mysql_error($db) ?>
                         </div>
                    </p>
     <?
    }
               }
     }
}
---------------------------------------------------

P.S.: Wenn man in der if - Bedingung das @ entfernt, werden keine zusätzlichen Fehlermeldungen ausgegeben.

  1. Hallo Martin,

    $result = mysql_query($sql,$db);
                   if (@mysql_query($result)){

    ehh... kannst du mir mal verraten, was mysql_query() mit einem false bzw einem true machen soll? :-) (mich wundert es allerdings, das das keine Fehler gibt) - ein if($result) sollte aber das gewünschte machen.

    Grüße aus Nürnberg
    Tobias

    --
    Selfcode: sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|
    1. Hallo Tobias,

      ehh... kannst du mir mal verraten, was mysql_query() mit einem false bzw einem true machen soll?

      Erstmal Danke! Und jetzt ein Zugeständnis: Ich bin soooooooo DoooooooooF- Unglaublich und Peinlich.

      Aber nichtdesto trotz und ganz allgemein, ein mysql_query() liefert ein False oder True:

      <Zitat href=" http://de3.php.net/manual/de/function.mysql-query.php ">
      Nur für SELECT, EXPLAIN, SHOW oder DESCRIBE Anweisungen liefert mysql_query() eine Ressourcen-Kennung oder FALSE, falls die Anfrage nicht korrekt ausgeführt wurde. Für alle anderen SQL Anweisungen ist der Rückgabewert von mysql_query() im Erfolgsfall TRUE, im Fehlerfall FALSE. Ein Rückgabewert ungleich FALSE bedeutet, dass die Anfrage gültig war und vom Server ausgeführt werden konnte.
      </Zitat>

      Nochmals Danke und einen kühlen Abend,

      Gruss Martin

      1. Hallo Tobias,

        vergiss mein Zitat. Jetzt erst habe ich verstanden, was du mit "was mysql_query() mit einem false bzw einem true mac" meinst

        ehh... kannst du mir mal verraten, was mysql_query() mit einem false bzw einem true mac
        <Zitat href=" http://de3.php.net/manual/de/function.mysql-query.php ">
        Nur für SELECT, EXPLAIN, SHOW oder DESCRIBE Anweisungen liefert mysql_query() eine Ressourcen-Kennung oder FALSE, falls die Anfrage nicht korrekt ausgeführt wurde. Für alle anderen SQL Anweisungen ist der Rückgabewert von mysql_query() im Erfolgsfall TRUE, im Fehlerfall FALSE. Ein Rückgabewert ungleich FALSE bedeutet, dass die Anfrage gültig war und vom Server ausgeführt werden konnte.
        </Zitat>

        Gruss Martin