Fehler in DELETE
Stephan
- php
0 Tom0 Tom
0 Yzerman0 Tobias Kloth0 Thomas Luethi
Hallo,
kann mir jemand sagen, wo der Fehler liegt??
---
<?
$db = mysql_connect("host", "dbuser", "dbpass");
$res = mysql_db_query("dbname", "DELETE * FROM users WHERE user = $_POST['user']");
$num = mysql_num_rows($res);
?>
---
Danke schon jetzt
Stephan--
--
Ohne Ziel stimmt jede Richtung
Hello,
$db = mysql_connect("host", "dbuser", "dbpass");
$res = mysql_db_query("dbname", "DELETE * FROM users WHERE user
sollte man nicht mehr benutzen...
= $_POST['user']");
$num = mysql_num_rows($res);
hier ist der Fehler.
Delete gibt kein Resultset, sondern ein Result zurück.
Grüße
Tom
Hello,
Delete gibt kein Resultset, sondern ein Result zurück.
Sorry, war nicht ganz richtig.
Es kommt trotzdem ein Handle auf das Result zurück. Das ist dann aber kein übliches Set von Records, wie bei SELECT, sondern nur ein einziger Record.
Alles Andere ist hier schon gesagt worden.
Grüße
Tom
Probier mal die Query:
"DELETE FROM users WHERE user = '".$_POST['user']."'"
(ohne *) ;-)
Hallo Stephan,
$res = mysql_db_query("dbname",
die Funktion ist veraltet, verwende mysql_select_db() und mysql_query() (->[1])
"DELETE * FROM users WHERE user = $_POST['user']");
Spaltennamen kann man bei DELETE nicht angeben (löschen kann man nur einen ganzen Datensatz auf einmal) - lass das Sternchen weg (das man sowieso nicht verwenden sollte [2]), dann sollte es funktionieren (den Syntax von DELETE findest du unter [3]) - außerdem solltest du um $_POST['user'] noch Anführungszeichen machen und den Wert _unbedingt_ noch mit mysql_escape_string() (->[1]) behandeln.
$num = mysql_num_rows($res);
die Funktion funktioniert nur bei SELECT; bei INSERT, UPDATE und DELETE brauchst du mysql_affected_rows() (->[1])
Grüße aus Nürnberg
Tobias
[1] http://de.php.net/ref.mysql
[2] http://www.dclp-faq.de/q/q-sql-select.html
[3] http://www.mysql.de/doc/de/DELETE.html
Hallo,
"DELETE * FROM users WHERE user = $_POST['user']";
Der Stern (bei DELETE * ) ist ueberfluessig.
Und die einfachen Anfuehrungszeichen in $_POST['user'] sind falsch,
weil um alles noch doppelte Anfuehrungszeichen sind, siehe P.S.
Zudem ist es gefaehrlich, einen String von der "boesen Gegenseite"
(naemlich vom Benutzer) ungeprueft in die Datenbank-Abfrage
einzubauen.
Und falls die Spalte "user" vom Typ String ist, muss es in der SQL-Query
(einfache) Anfuehrungszeichen um den String haben.
Ich wuerde es so machen (ungetestet!):
$usergeprueft=mysql_escape_string($_POST['user']);
/* Wenn es sich um einen Integerwert handeln soll, noch folgendes: */
$usergeprueft=intval($usergeprueft);
/* Query zusammenbauen und in eigene Variable stecken,
dann kann man sie im Misserfolgsfall auch einfacher anzeigen lassen: */
$query="DELETE FROM users WHERE user = '$usergeprueft'";
$result = mysql_query($query)
or die("Loeschen fehlgeschlagen.<br>Query:$query<br>MySQL-Fehlermeldung" . mysql_error());
Gruesse,
Thomas
P.S.
Assoziative Arrays und doppelte Anfuehrungszeichen: Siehe
http://www.php.net/manual/en/language.types.string.php#AEN3553
Korrekt: echo "Blabla $foo[bar] Blabla";
Korrekt: echo "Blabla {$foo['bar']} Blabla";
Falsch: echo "Blabla $foo['bar'] Blabla";