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?
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)."'";
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.
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
{$varname} - [link:http://www.php.net/manual/de/language.types.string.php#language.types.string.parsing.complex@title=komplexe Syntax
$varname - einfache Syntax