WHERE ... AND ... AND = ERROR ?
0815IDIOT
- datenbank
Ich habe ein Problem mit MySQL. Ich würde gerne Daten aus einer Tabelle Löschen. Diese Daten sollen aber 3 Kriterien erfüllen. Jedoch bekomme ich leider immer ein Error und ich weiß nicht warum ... Ich könnte mir Vorstellen das es daran liegt dass ich mehrer Kriterien erfüllt haben will, jedoch erscheint mir das nach meinen Recherchen eher unwahrscheinlich. Genug geschrieben, hier ist mein Code:
$daten = "DELETE FROM buchen WHERE Username = $Username AND Datum = $Datum AND Von = $VonArray[$Zahler]";
$loschen = mysql_query($daten) or DIE (mysql_error());
Als fehler kommt dann: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '.2013 AND Von = '07:00'' at line 1
$VonArray[$Zahler] = "07:00";
$Datum = "06.07.2013";
Ich kann mir beim besten willen nicht erklären warum ich diesen Fehler habe.
Danke im Vorraus
Tach!
$daten = "DELETE FROM buchen WHERE Username = $Username AND Datum = $Datum AND Von = $VonArray[$Zahler]";
$loschen = mysql_query($daten) or DIE (mysql_error());
> Als fehler kommt dann: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '.2013 AND Von = '07:00'' at line 1
Das ist ein ganz ordinärer Syntaxfehler. Lass dir ausgeben, wie dein fertiges Statement aussieht. Da steht zum Beispiel ein Datum einfach so drin, ohne in Anführungszeichen eingerahmt zu sein. Ebenso der Username. Und vermutlich hast du auch den [Kontextwechsel](http://wiki.selfhtml.org/wiki/Artikel:Kontextwechsel) nicht beachtet und somit die Nummer 1 aller Fehler eingebaut: SQL-Injection.
dedlfix.
Das Fertige Statement sieht so aus:
DELETE FROM buchen WHERE Username = Höhne AND Datum = 06.07.2013 AND Von = '07:00'
meinst du etwas ich soll es so schreiben?:
$daten = "DELETE FROM buchen WHERE Username = "$Username" AND Datum = "$Datum" AND Von = "$VonArray[$Zahler]"";
> $loschen = mysql_query($daten) or DIE (mysql_error());
Sry mein fehler: Das Fertige Statement sieht so aus:
DELETE FROM buchen WHERE Username = Höhne AND Datum = 06.07.2013 AND Von =
Sry mein fehler: Das Fertige Statement sieht so aus:
DELETE FROM buchen WHERE Username = Höhne AND Datum = 06.07.2013 AND Von =
moin
versetz dich mal in die lage von Mysql, da sagt dir einer lösche von Tabelle buchen wo brrzzzzzt = brzzzzzt und brzrzrzrz=brrrzzzzzzzzzz und brzrzrzrzrzr=
als Datenbank sage ich jetzt:
löschen .. verstehe ich
von Tabelle buchen ... verstehe ich
wo ... achso nur bestimmte, ok
brrzzzzzt= ... hm, vermute mal, dass das ein spaltenname ist
brzzzzzt ... ähm ... ist das jetzt ein anderer spaltenname oder ein string oder sonstwas
und ... ach der will noch mehr ... nagut ...
brzrzrzrz= ... hm, vermute mal, dass das ein spaltenname ist
brrrzzzzzzzzzz ... ähm ... ist das jetzt ein anderer spaltenname oder ein string oder ne zahl oder ...
und ... ach der will noch mehr ... nagut ...
brzrzrzrzrzr= ... hm, vermute mal, dass das ein spaltenname ist
... ja was denn? ich soll dch was vergleichen, aber was denn?
natürlich kommt der Parser erst garnicht so weit, da er bei der ersten Unstimmigkeit schon abbricht
Tach!
Das Fertige Statement sieht so aus:
DELETE FROM buchen WHERE Username = Höhne AND Datum = 06.07.2013 AND Von = '07:00'
meinst du etwas ich soll es so schreiben?:
Für meine Meinung interessiert sich der MySQL-Parser nicht. Du musst es (einfach nur) regelkonform notieren.
$daten = "DELETE FROM buchen WHERE Username = "$Username" AND Datum = "$Datum" AND Von = "$VonArray[$Zahler]"";
Das entspräche nicht den Regeln von PHP, weil du mit " den String einleitest und mittendrin " zu verwenden versuchst. Ich rate dir, dringend den Kontextwechsel-Artikel zu lesen und zu verstehen (zumindest die Einleitung und den MySQL-relevanten Teil).
dedlfix.
$daten = "DELETE FROM buchen WHERE Username = "$Username" AND Datum = "$Datum" AND Von = "$VonArray[$Zahler]"";
$daten = "DELETE FROM buchen WHERE Username = '$Username' AND Datum = '$Datum' AND Von = '{$VonArray[$Zahler]}'";
so isses sicherer ... also mit {$...}
Tach!
$daten = "DELETE FROM buchen WHERE Username = "$Username" AND Datum = "$Datum" AND Von = "$VonArray[$Zahler]"";
$daten = "DELETE FROM buchen WHERE Username = '$Username' AND Datum = '$Datum' AND Von = '{$VonArray[$Zahler]}'";
so isses sicherer ... also mit {$...}
Nein, ist es nicht. Die korrekte PHP-Syntax ist hier irrelevant, weil man wegen der notwendigen Kontextwechselbeachtung sowieso keine Variablenauflösung mehr im String hat.
$daten = "DELETE FROM buchen WHERE Username = '" . mysql_real_escape_string($Username) . "' AND Datum = '". mysql_real_escape_string($Datum) . "' AND Von = '" . mysql_real_escape_string($VonArray[$Zahler]). "'";
oder übersichtlicher, wie ich finde:
$daten = sprintf("DELETE FROM buchen WHERE Username = '%s' AND Datum = '%s' AND Von = '%s'",
mysql_real_escape_string($Username),
mysql_real_escape_string($Datum),
mysql_real_escape_string($VonArray[$Zahler]));
dedlfix.