Stephan: Fehler in DELETE

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

  1. 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

    1. 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

  2. Probier mal die Query:
    "DELETE FROM users WHERE user = '".$_POST['user']."'"

    (ohne *) ;-)

  3. 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

    --
    Selfcode: sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|
  4. 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";