Hi!
'$bw_ap2' wird von PHP als String betrachtet, der den Wert '$bw_ap2' hat. "Richtig" wäre "$bw_ap2", da nur der als Variable substituiert wird, was zwischen doppelten Anführungszeichen steht.
Abgesehen davon - was du schon selbst erkannt hast - dass die Variable innerhalb von "" steht ...
Und "Richtig" hab ich persönlich unter Anführungszeichen gesetzt, weil das setzen von Variablen innerhalb von Anführungszeichen ohnehin ein hundsmiserabler Stil ist; wirklich richtig wäre als ...'".$bw_ap2."'...
... das ist nicht "wirklich richtig" sondern umständlich. Viel mehr Zeichen zu lesen, zu tippen, sich zu vertippen und bringt am Ende keine Punkte.
von diversen möglichen Sicherheitsproblemen mit dieser Konstruktion an sich einmal abgesehen, aber das ist ein anderes Problem.
Das ist genau eines der Hauptprobleme, das zu SQL-Injection-Lücken führt. Diese sind sehr beliebt, unwissende Programmierer bauen sie in großer Zahl ein, wissende Cracker nutzen sie aus. Die Zeitungen sind grad voll von Einbruchsnachrichten, und ein guter Teil wird auch wegen solchen Lücken erfolgreich gewesen sein.
Wie auch immer, "wirklich richtig" beachtet den Kontextwechsel. Und dann stellt sich das Problem der Variablensubstitution gar nicht mehr, weil man entweder Prepared Statements mit Platzhaltern verwendet, beim Verwenden von Maskierfunktionen wie mysql_real_escape_string() sowieso den String unterbrechen muss oder mit Platzhalterfunktionen wie sprintf() nebst Maskierfunktion arbeitet.
Lo!