3 Pluspunkte 0 Minuspunkte

Wenn ich einen MySQL Query in PHP schreibe. Was genau ist die richtige Weise wie ich die Anführungszeichen verwende?

"SELECT * FROM test WHERE name='Hello world'";  

oder  

"SELECT * FROM test WHERE name=\"Hello world\"";  

oder  

'SELECT * FROM test WHERE name="Hello world"';
von  

2 Antworten

2 Pluspunkte 0 Minuspunkte

Die ersten beiden Beispiele erzeugen genau den selben Query.

"SELECT * FROM test WHERE name='Hello world'";  
"SELECT * FROM test WHERE name=\"Hello world\"";

Wenn du Einzelanführungszeichen verwendest wie im 3. Beispiel

'SELECT * FROM test WHERE name="$myVariable"';

wird PHP den Inhalt der Zeichenkette wortwörtlich interpretieren, ohne Variablen oder Escape-Zeichen zu analysieren. In diesem speziellen Beispiel würde es immer noch funktionieren, weil es keine Variablen oder Escape-Zeichen gibt. Aber in komplexeren Szenarien, in denen du Variablen in den SQL-String einfügen möchtest, könnten sich die Verwendung von Doppelanführungszeichen als praktischer erweisen.

von (640 Punkte)  
Sehr gute Erklärung. Trotzdem ein Hinweis auf Prepared Statements. https://www.w3schools.com/php/php_mysql_prepared_statements.asp
2 Pluspunkte 0 Minuspunkte

Prepared Statements sind definitiv die bessere Wahl wenn du mit Benutzereingaben arbeitest. Prepared Statements schützen vor SQL Injection, da sie die Benutzereingaben separat vom SQL Statement behandeln. Die Eingaben werden als Parameter übergeben, nicht direkt in den String eingebaut. Bei unsicheren Methoden wie der direkten Verwendung von Benutzereingaben in SQL-Queries (z. B. SELECT * FROM test WHERE name='$name') könnte ein Angreifer schadhaften Code einschleusen was durch Prepared Statements verhindert wird.

$stmt = $conn->prepare("SELECT * FROM test WHERE name=?");
$stmt->bind_param("s", $name);
$stmt->execute();
von (884 Punkte)  
Darauf sollte in der Tat immer hingewiesen werden.