![]() |
MYSQL/PHP Datensatz löschen geht nicht
Jetzt steh ich an: Möchte einen oder mehrer Datensätze löschen, geht aber nicht, die Daten bleiben erhalten.
________________________________ $db = new mysqli('localhost', $_SESSION['valid_user'], $_SESSION['pw'], 'handel'); for($i=0;$i<$anz;$i++) { $query = "DELETE FROM news WHERE news_ID = " . $loeschen[$i];} ________________________________ wobei "news_ID" das Indexfeld einer Tabelle ist. Das Array funktioniert. Der Benutzer hat die Rechte fürs Löschen. Verbindung zur DB wird aufgebaut. Woran könnte es sonst liegen? |
Re: MYSQL/PHP Datensatz löschen geht nicht
Zitat:
|
Gib' dir die Query als String aus und führ sie in PHPMyAdmin aus.
Dann siehst du die Fehlermeldung gleich. Vielleichst versuchst du ja einen Masterdatensatz zu löschen, für den noch Datensätze in einer Detailtabelle existieren... |
@hewlett
Auf der Seite werden zuerst Daten eingelesen und angezeigt, gleichzeitig wird ein Formular mit Checkboxen erstellt. Wenn der SUBMIT geklickt wird, dann wird in IF ($SUBMIT){ obiger Code aufgerufen. @delphirocks Wenn ich den String in PHPMyAdmin eingeben, wird der entsprechende Datensatz gelöscht. Aber weil du sagst Masterdatensatz, es besteht zu einer anderen Tabelle eine referentielle Integrität. Hatte ich mal testweise erstellt und vergessen, könnte es damit zusammen hängen? |
Naja, wenn das Statement im PHPMyAdmin funktioniert, muß es so auch funktionieren. Ich bin bezügl. der neueren MySQL Versionen nicht ganz auf Stand. Bei früheren Versionen wurden Foreign Keys ja nicht erzwungen, d.h. du konntest einen Master-Datensatz löschen, obwohl ein Detaildatensatz vorhanden war (auch wenn der Key nicht mit on delete cascade erstellt wurde).
Die neueren Versionen (5.0++ ???) erlauben dir das nicht mehr, gottseidank. MySql sollte dir aber eigentlich eine Fehlermeldung zurückliefern, soferne du diese nicht mit '@' unterdrückt hast. Übrigens wäre es wahrscheinlich besser, anstatt einer "For" Schleife die Abfrage so zu formulieren, sodaß nur ein "Roundtrip" vom Webserver zur DB notwendig ist. Also anstatt: for (...) Delete from.... ein delete from table where newsid in (1,2,3,5,6) zu erstellen, oder delete from table where newsid between(1,6). Oder so ähnlich. Die Syntax könnte eventuell ein wenig andes sein, ich bin nicht ganz auf Stand... |
Hallo...
Wenn man von deinem Code-Schnippsel ausgeht, dann wird zwar bei jedem Schleifendurchlauf aufs neue ein String erstellt, dieser aber nie ausgeführt. Die Schleife müsste so aussehen: for($i=0;$i<$anz;$i++) { $query = "DELETE FROM news WHERE news_ID = " . $loeschen[$i]; $db->query($query); } mfg Thomas |
ARRRGGGG, vor lauter Bäumen sieht man den Wald nicht :D
DANKE! |
Zitat:
|
"wo/wann führst du die query dann aus?"
jetzt versteh ich auch schon, was du mit 'query' gemeint hast. Anfängerblindheit sag ich mal. |
Alle Zeitangaben in WEZ +2. Es ist jetzt 19:23 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag