MYSQL nach Delete unbrauchbar
-
Wenn ich in meiner DB, aus der Tabelle anbieter, einen Eintrag lösche ist die ganze MYSQL danach defekt. Es ist nicht möglich auf die Daten wieder zuzugreifen und es werden mehr als der Anbieter, der per where lokalisiert wird gelöscht.
Hier mein MYSQL Query inklusive PHP Skript.
$name=$_POST['anbieter']; include "sql_data.php"; $connection=mysql_connect($mysql_host, $mysql_user, $mysql_password) or die ("Verbindungsversuch fehlgeschlagen"); mysql_select_db($mysql_database, $connection) or die("Konnte die Datenbank nicht waehlen."); $sql="DELETE FROM anbieter WHERE name = '$name'"; mysql_query($sql) or die(mysql_error()); mysql_close();
Fehler gibt es keine, aber die Selektierung ist falsch und es werden falsche Datensätze gelöscht.
Wer weiss Rat?
-
Das kann nicht sein des der Query ist richtig. Dann hast du ein Problem mit deinem restlichen Code zur Abfrage.
Defekt bei MySQL heißt das der Tabele defekt ist und das macht MySQL nicht bei einem Delete.
Kann man in PHPMYADMIN aber dann auch sehen.
-
Die Routine zum Auslesen der ganzen Datensätze sieht so aus.
include "sql_data.php"; $connection=mysql_connect($mysql_host, $mysql_user, $mysql_password) or die ("Verbindungsversuch fehlgeschlagen"); mysql_select_db($mysql_database, $connection) or die("Konnte die Datenbank nicht waehlen."); $result=mysql_query("SELECT id FROM anbieter",$connection) or die("Anfrage nicht erfolgreich"); $anzahl=mysql_numrows($result); for($i=1;$i<=$anzahl;$i++) { $result = mysql_query("Select * FROM anbieter where id = $i") or die(mysql_error()); if ($result) { $row= mysql_fetch_array($result); $name=$row["name"]; //Restlichen Variablen werden auch so zugewiesen mysql_free_result($result); } echo "<table width=\"660\" border=\"1\" bordercolor=\"#FFFFFF\">\n"; echo " <tr>\n"; echo " <td width =\"110\">$name</td>\n"; //Restausgaben werden formatiert und eingesetzt mysql_close(); }
Die Rows stimmen noch in der PHPMyAdmin stehen auchdie Werte auch noch richtig drin bis auf die falsch gelöschten Anbieter, aber das Skript kann diese nicht auslesen.
Ich hab jetzt gesehen das die id nicht geändert wird. Also heisst es, wenn ich den Datensatz mit der id 2 lösche, die MYSQL Funktion mysql_numrows 2 zurückliefert.
Aber da die Abfrage id=$i sagt den Datensatz 2 abfragen, das der Datewnsatz mit der id 3 nie angesprochen wird.
Kann die MSQL die id automatisch neu benennen? Oder wie kann ich eine Ausgabe aller Datensätze realsieren ohne for?
-
webtester schrieb:
Aber da die Abfrage id=$i sagt den Datensatz 2 abfragen, das der Datewnsatz mit der id 3 nie angesprochen wird.
Du mußt mal versuchen die Sätze logisch korrekt zu formulieren, sonst verstehen wir Dich nicht.
Der Fehler entsteht wahrscheinlich weil Du den Cursor zu früh schließt. Warum machst Du es überhaupt so umständlich? Du kannst doch alles in einem Rutsch verarbeiten:$result=mysql_query("SELECT * FROM anbieter",$connection) or die("Anfrage nicht erfolgreich"); while($row = mysql_fetch_array($result)){ $id=$row["id"]; $name=$row["name"]; //Restlichen Variablen werden auch so zugewiesen } mysql_free_result($result);
-
Hab die while Lösung angewendet und nun passt alles.