Fehler bei DELETE ?!

Vertigo21

Erfahrenes Mitglied
Hallo zusammen.

Diesen Code habe ich erstellt, um News aus einer Datenbank zu löschen. Allerdings bekomme ich immer den Fehler:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '* FROM tbl_news WHERE news_id=6' at line 1

Woran kann das liegen? Die Befehlsreferenzen habe ich so weit mal durchgesehen und der Query sollte demnach ok sein. Ich verwende MySQL 4.1.12a und PHP 5.0.4.

Bevor die folgende Seite aufgerufen wird, sieht der User eine Seite, auf der noch mal alle bereits verfassten News aufgeführt sind, inklusive der News-Id. Um nun News zu bearbeiten oder zu löschen gibt der User in ein Textfeld die News-Id ein und wird dann zu dieser Seite weitergeleitet.

PHP:
<?
       //***Verarbeiten der Eingaben***
    
     //***DAU- Falle***
     if($_POST["news_id"]=="")
         {echo "<meta http-equiv='refresh' content='0; URL=editnews.php'>";}
    
    //***Beginn der normalen Verarbeitung***
        else
         {
          $news_id = $_POST["news_id"];
       	  if ($_POST["edit"]=="bearbeiten")
       		 {$edit_news=TRUE;$delete_news=FALSE;}
       		else
       		 {$delete_news=TRUE;$edit_news=FALSE;}
         }
       
       //***Verbindung zur Datenbank aufbauen***
        $mysql_user = 'root';
        $mysql_pw   = '';
        $mysql_host = 'localhost';
        $mysql_db   = 'news_db';
         
       // $query1="UPDATE "; 
        $query2="DELETE * FROM tbl_news WHERE news_id=$news_id";
       
        if (@!$res_id = mysql_connect($mysql_host, $mysql_user, $mysql_pw))
        {
         mysql_close(); 
       	die ('<b>Fehler!</b><br> Die Datenbank konnte nicht kontaktiert werden.');
        }
       
        if(@!mysql_select_db($mysql_db))
        {
         mysql_close();
         die ('<p><b>Fehler</b><br>Die Datenbank konnte nicht ausgewählt werden.');
        }
       
       //***Aufrufen der ensprechenden Formulare / SQL-Befehle***
         if ($edit_news)
          {echo "In Arbeit...";
          }
         if ($delete_news)
          {
       //***Daten aus der DB löschen***
       		if(mysql_query("$query2"))
       		{
 	 echo '<font face="Arial"><b><h3>News erfolgreich gelöscht</h3></b></font>';
       	   echo "<meta http-equiv='refresh' content='2; URL=editnews.php'>";
       		}
       		else
       		{
 		 echo '<font face="Arial"><b><h3>Ein Fehler ist beim Löschen aufgetreten</h3></b></font>';
       		 echo mysql_error();
       	 echo "<meta http-equiv='refresh' content='8; URL=editnews.php'>";
       		}
          }
       
        mysql_close();
       
       ?>
 
Probiere es mit dem Befehl " TRUNCATE 'tbl_news' "
Das ist zumindest der Befehl, der von PHPMyAdmin erstellt wird, wenn man (per Mausklick) eine Tabelle leeren möchte.

Ah sorry, hab mir nicht deine ganze Frage durchgelesen. Mit diesem Befehl würde wahrscheinlich etwas zu viel gelöscht ;)
Aber ich glaube ich habe den Fehler gefunden: probiere es ohne dem *
 
Zuletzt bearbeitet:
Heho, ohne das * funktioniert es. Allerdings wundert mich das ein wenig. Habe ich in der Schule beim Fach SQL doch gelernt, dass das Sternchen * der Platzhalter für "Alles" ist... :confused:
 
Zuletzt bearbeitet:
Ja aber in der Schule im Fach SQL sagen die einem auch, dass man das * nur beim select braucht (zumindest mir haben die das gesagt ;)).
im falle eines delete wäre es ja gar nicht möglich, eine einzelne spalte zu leeren, also braucht man auch nicht extra ein * schreiben, weil ja sowieso die ganze zeile gelöscht wird.
 
Hm, mein Lehrer meinte immer, wenn wir kein Sternchen setzen meckert er, weil er dann nicht weiß welche Spalte er löschen soll. Mit Sternchen hingegen löscht er jede Spalte in der bestimmten Zeile.

Allerdings beziehe ich mich dabei auf SQL aus MS ACCESS. Und die Jungs von Microsoft machen ja eh meistens was sie wollen...
 
Ja das stimmt. Ich beziehe mich da auf Oracle, und wie mir aufgefallen ist, gibt es kaum Unterschiede zwischen dem Oracle-SQL und MySQL (außer dass ich bis gestern noch nie etwas von einem LEFT JOIN gehört habe ;))
 
Zurück