mysql Datensatz löschen
Moderatoren: crack, Krüsty, Marwin
-
Rainer
- Alter Hase
- Beiträge: 81
- Registriert: Freitag 21. Juli 2006, 14:39
- Wohnort: Senftenberg
- Kontaktdaten:
mysql Datensatz löschen
Hallo,
ich arbeite seit einiger Zeit mit php und fange jetzt mit mysql an. Komme auch soweit klar, bis ich jetzt auf das Problem mit dem Löschen eines Datensatzes gestoßen bin: der Datensatz wird zwar wie erwartet gelöscht, aber gleichzeitig auch immer der letzte Datensatz in der Tabelle.
<?php
$loeschen = "DELETE FROM Daten WHERE id = 3";
if( mysql_query( $loeschen ) )
echo( "Datensatz erfolgreich gelöscht!" );
else
die( "Fehler! Konnte Datensatz nicht löschen: " . mysql_error() );
?>
vorher wurde natürlich mit mysql_connect die Verbindung zum Server erfolgreich hergestellt und mit mysql_select_db die Datenbank ausgewählt. Kann sich jemand vorstellen, woran das liegen kann? Ich habe schon die Ausführung alle anderen Programmteile weggelassen, es bleibt bei dem Fehler. Die Tabelle hat ein Feld `id`, das automatisch eingetragen wird. Alle anderen Selectierungen bei UPDATE usw. funktionieren einwandfrei, es wird wirklich nur der gewählte Datensatz bearbeitet.
Vielen Dank schon mal.
Gruß Rainer
ich arbeite seit einiger Zeit mit php und fange jetzt mit mysql an. Komme auch soweit klar, bis ich jetzt auf das Problem mit dem Löschen eines Datensatzes gestoßen bin: der Datensatz wird zwar wie erwartet gelöscht, aber gleichzeitig auch immer der letzte Datensatz in der Tabelle.
<?php
$loeschen = "DELETE FROM Daten WHERE id = 3";
if( mysql_query( $loeschen ) )
echo( "Datensatz erfolgreich gelöscht!" );
else
die( "Fehler! Konnte Datensatz nicht löschen: " . mysql_error() );
?>
vorher wurde natürlich mit mysql_connect die Verbindung zum Server erfolgreich hergestellt und mit mysql_select_db die Datenbank ausgewählt. Kann sich jemand vorstellen, woran das liegen kann? Ich habe schon die Ausführung alle anderen Programmteile weggelassen, es bleibt bei dem Fehler. Die Tabelle hat ein Feld `id`, das automatisch eingetragen wird. Alle anderen Selectierungen bei UPDATE usw. funktionieren einwandfrei, es wird wirklich nur der gewählte Datensatz bearbeitet.
Vielen Dank schon mal.
Gruß Rainer
- crack
- Administrator
- Beiträge: 280
- Registriert: Dienstag 21. Dezember 2004, 15:02
- Wohnort: 53783 Eitorf
- Kontaktdaten:
Re: mysql Datensatz löschen
Ja, Ich hatte schon das gleiche Problem und kenne die Lösung:
Hinter das 'WHERE id=parameter' muss noch dieses 'LIMIT 1' das besagt das nur der gewählte Satz gelöscht werden soll ... 
Code: Alles auswählen
<?php
$loeschen = "DELETE FROM Daten WHERE id = 3 LIMIT 1";
if( mysql_query( $loeschen ) )
echo( "Datensatz erfolgreich gelöscht!" );
else
die( "Fehler! Konnte Datensatz nicht löschen: " . mysql_error() );
?>mit freundlichen grüssen,
with best regards,
crack
with best regards,
crack
-
Rainer
- Alter Hase
- Beiträge: 81
- Registriert: Freitag 21. Juli 2006, 14:39
- Wohnort: Senftenberg
- Kontaktdaten:
Re: mysql Datensatz löschen
Hallo crack,
vielen Dank für die schnelle Hilfe. Darauf wäre ich nun nicht gekommen, dazu bin ich noch zu neu bei mySql.
Eine schöne Woche (für den Rest)
Gruß Rainer
vielen Dank für die schnelle Hilfe. Darauf wäre ich nun nicht gekommen, dazu bin ich noch zu neu bei mySql.
Eine schöne Woche (für den Rest)
Gruß Rainer
-
Rainer
- Alter Hase
- Beiträge: 81
- Registriert: Freitag 21. Juli 2006, 14:39
- Wohnort: Senftenberg
- Kontaktdaten:
Re: mysql Datensatz löschen
Hallo crack,
ich habe den Quelltext gerade geändert und getestet, der Fehler passiert weiterhin. Es wird immer der jeweils letzte Datensatz mitgelöscht. Der zu löschende Datensatz wird korrekt gelöscht. Da die ID nur einmal vorhanden ist, müsste nach meinem Verständnis eh nur der eine Datensatz gelöscht werden; wird freilich unter WHERE ein Name angegeben und der ist mehrmals drin, würden freilich die anderen Datensätze auch gelöscht. Ich verstehe das einfach nicht.
Gruß Rainer
ich habe den Quelltext gerade geändert und getestet, der Fehler passiert weiterhin. Es wird immer der jeweils letzte Datensatz mitgelöscht. Der zu löschende Datensatz wird korrekt gelöscht. Da die ID nur einmal vorhanden ist, müsste nach meinem Verständnis eh nur der eine Datensatz gelöscht werden; wird freilich unter WHERE ein Name angegeben und der ist mehrmals drin, würden freilich die anderen Datensätze auch gelöscht. Ich verstehe das einfach nicht.
Gruß Rainer
- crack
- Administrator
- Beiträge: 280
- Registriert: Dienstag 21. Dezember 2004, 15:02
- Wohnort: 53783 Eitorf
- Kontaktdaten:
Re: mysql Datensatz löschen
sehr eigenartig, in der Tat ... welche ID hat denn der letzte Datensatz? ist ID ein 'primaerer Schlüssel' und mit dem Attribut 'auto Increment' versehen?
mit freundlichen grüssen,
with best regards,
crack
with best regards,
crack
-
Rainer
- Alter Hase
- Beiträge: 81
- Registriert: Freitag 21. Juli 2006, 14:39
- Wohnort: Senftenberg
- Kontaktdaten:
Re: mysql Datensatz löschen
ja, mit dem Quelltext wurde die Tabelle erstellt. Die Tabelle hat 6 Einträge. Lösche ich den jeweils letzten, funktioniert es einwandfrei, ansonsten wird zusätzlich immer der jeweils letzte Eintrag mit gelöscht. Ich bin gerade wieder seit gut 3 Stunden dran und komme einfach nicht auf den Fehler. Danke, dass Du's Dir noch mal anschaust.
Gruß Rainer
Gruß Rainer
Code: Alles auswählen
<?php
$command = 'CREATE TABLE '.$_POST['table'];
$create_query = $command." (
id INT PRIMARY KEY AUTO_INCREMENT,
Name VARCHAR(30),
eMail TEXT,
Home TEXT,
Content TEXT,
Datum VARCHAR(19),
Comment TEXT
)";
if( mysql_query( $create_query ) )
echo( "Tabelle erzeugt.<br>" );
else
die( "Fehler! Konnte keine Tabelle ereugen: " . mysql_error() );
?>-
Rainer
- Alter Hase
- Beiträge: 81
- Registriert: Freitag 21. Juli 2006, 14:39
- Wohnort: Senftenberg
- Kontaktdaten:
Re: mysql Datensatz löschen
Hallo crack,
ich habe den Fehler gefunden und es war ein besonders dummer Fehler. Der letzte Datensatz wurde nicht gelöscht; da ich bei der Kontrolle der verbleibenden Datensätze rückwärts auflisten wollte, habe ich das mit einer FOR-Schleife gemacht und vorher die Anzahl der Datensätze zum zurückzählen ausgelesen. Wenn ich also in der Mitte einen Datensatz gelöscht habe, wurde bei der Kontrolle der letzte Datensatz nicht mit aufgelistet und ich hatte fälschlicherweise angenommen, er wurde mit gelöscht. Dennoch ist der Hinweis auf LIMIT für mich von Nutzen, wenn ich mal nicht nach ID lösche, soweit hatte ich mich noch nicht durchgearbeitet. Entschuldige bitte den Stress und nochmals danke.
Gruß Rainer
ich habe den Fehler gefunden und es war ein besonders dummer Fehler. Der letzte Datensatz wurde nicht gelöscht; da ich bei der Kontrolle der verbleibenden Datensätze rückwärts auflisten wollte, habe ich das mit einer FOR-Schleife gemacht und vorher die Anzahl der Datensätze zum zurückzählen ausgelesen. Wenn ich also in der Mitte einen Datensatz gelöscht habe, wurde bei der Kontrolle der letzte Datensatz nicht mit aufgelistet und ich hatte fälschlicherweise angenommen, er wurde mit gelöscht. Dennoch ist der Hinweis auf LIMIT für mich von Nutzen, wenn ich mal nicht nach ID lösche, soweit hatte ich mich noch nicht durchgearbeitet. Entschuldige bitte den Stress und nochmals danke.
Gruß Rainer
- crack
- Administrator
- Beiträge: 280
- Registriert: Dienstag 21. Dezember 2004, 15:02
- Wohnort: 53783 Eitorf
- Kontaktdaten:
Re: mysql Datensatz löschen
Wenns jetzt funzt ist doch Supi
Guter Tip: arbeite dich ein wenig in PHPMyAdmin ein, denn damit kannst Du die Vorgänge innerhalb der Datenbank sehr gut kontrollieren und Datensätze auch von Hand bearbeiten 
-
Rainer
- Alter Hase
- Beiträge: 81
- Registriert: Freitag 21. Juli 2006, 14:39
- Wohnort: Senftenberg
- Kontaktdaten:
Re: mysql Datensatz löschen
danke für den Tip. Na immerhin, einen Nutzen hatte das ganze doch noch für mich: ich habe alle Einzelteile der Datenbankgeschichte noch ein paar mal durchdacht, das kann ja nie schaden...
). Ich brauchte das für ein Gästebuch, das ich zunächst datenmäßig über eine Textdatei geregelt hatte und jetzt umgeschrieben habe, da ich bei 1&1 sowieso die Datenbank mitbezahlen muss, wenn ich php haben möchte und ausserdem lässt sich das kommentieren und löschen von Einträgen so auch eleganter lösen.
Nochmals vielen Dank für die Hilfe.
Gruß Rainer
Nochmals vielen Dank für die Hilfe.
Gruß Rainer