Geschweifte Klammern um Variable bei MYSQL-Query-Abfragen
Thimm
- datenbank
Tach-chen,
ich nutze diese mySQL-Abfrage und möchte wissen was sich ändert, wenn ich die geschweifte klammern weglasse:
statt:
SELECT * FROM meintable WHERE name='{$varname}'
so:
SELECT * FROM meintable WHERE name='$varname'
Beides geht aber was hat es zur Folge.
Grüße Thimm
Hi Thimm,
ich nutze diese mySQL-Abfrage und möchte wissen was sich ändert, wenn ich die geschweifte klammern weglasse:
In welcher Programmiersprache setzt du die Statements ab? Oder setzt du sie so direkt in der Konsole ab?
Ok, war ne rhetorische Frage, du nutzt PHP nehme ich an und auch nur damit hat das was zu tun, deine Datenbank bekommt den Befehl ja aufgelöst.
statt:
SELECT * FROM meintable WHERE name='{$varname}'
so:
SELECT * FROM meintable WHERE name='$varname'
Beides geht aber was hat es zur Folge.
Beides sind Varianten der Variableneinbindung in Strings.
php.net erklärt den Unterschied ganz gut und zeigt auch andere Möglichkeiten.
ciao
romy
Moin,
statt:
SELECT * FROM meintable WHERE name='{$varname}'
so:
SELECT * FROM meintable WHERE name='$varname'Beides geht aber was hat es zur Folge.
Beides sind Varianten der Variableneinbindung in Strings.
php.net erklärt den Unterschied ganz gut und zeigt auch andere Möglichkeiten.
Insbesondere sollte man grundsätzlich eine Escaping-Funktion benutzen, damit man sich kein SQL-Injection einfängt. Also beide Varianten auf den Müll, und stattdessen:
$sql = "SELECT * FROM meintable WHERE name='".mysql_real_escape_string($varname)."'";
- Sven Rautenberg
Wow Sven, das ist prima, reicht das denn aus, um sich gegen SQL-INJECTIONEN zu schützen?
$sql = "SELECT * FROM meintable WHERE name='".mysql_real_escape_string($varname)."'";
greetings Thimm
Moin!
Wow Sven, das ist prima, reicht das denn aus, um sich gegen SQL-INJECTIONEN zu schützen?
$sql = "SELECT * FROM meintable WHERE name='".mysql_real_escape_string($varname)."'";
Ja, das betrachte ich als ausreichend - und die restliche Fachwelt wohl auch.
Faustregel ist:
1. Alle Strings, die aus Variablen kommen und in SQL gehen sollen, immer escapen - egal wie sicher man ist, dass da nur ungefährliche Texte drin stehen werden.
2. Auch Zahlenwerte immer in Anführungsstriche schreiben und escapen. MySQL muss die Zahl sowieso wieder parsen, weil sie ja als String übergeben wird.
Die Alternative zu 2. wäre, aus der Variablen den Zahlenwert rauszuparsen (in PHP z.B. mit intval()) - das bringt eigentlich aber keinen Vorteil, eher einen Nachteil, weil plötzlich Variablen auf zwei unterschiedliche Arten behandelt werden, obwohl das nicht notwendig ist.
- Sven Rautenberg
Hallo
SELECT * FROM meintable WHERE name='{$varname}'
SELECT * FROM meintable WHERE name='$varname'
Im ersten Fall werden alle Datensätze zurückgegeben, die in der Spalte name den exakten, d.h. die Zeichenfolge {$varname} enthalten, im zweiten Fall die Datensätze, die die Zeichenfolge $varname in dieser Spalte enthalten, d.h. ganz andere Daten. Ich kann mir nicht vorstellen, dass eine der beiden Abfragen bei normalem Datenbestand überhaupt Datensätze zurückliefert :-)
Vermutlich meinst Du aber etwas ganz anderes, was gar nichts mit Datenbanken und SQL zu tun hat. Vielleicht willst Du mit der Programmiersprache Deiner Wahl (vermutlich PHP) eine Zeichenkette zusammenbauen, die als SQL-Anweisung an MySQL weitergereicht wird. Dann hast Du hier die
Freundliche Grüße
Vinzenz