Weder das eine noch das andere ist ganz korrekt.
1. PHP kann nicht mehrere Querys in einem String ausführen (seit Version ka.) - da könnt ihr da Semikolons reinkloppen wie ihr lustig seit, es geht nicht.
2. Nehmen wir mal an wir haben einen Query ala
$SQL = "SELECT * FROM benutzertabelle WHERE benutzername LIKE '{$_REQUEST['user']}' AND passwort = '{$_REQUEST['passwort']}' LIMIT 1"
Jetzt könnte man sich einloggen indem man als username folgendes eingibt:
das Passwortfeld lässt man leer oder trägt irgendetwas ein.
Der Query sieht dann so aus:
$SQL = "SELECT * FROM benutzertabelle WHERE benutzername LIKE '' OR 1 -- ' AND passwort = 'irgendetwas' LIMIT 1"
Da -- in MySQL der Beginn für ein Kommentar ist würde nur noch dieser Query an die Datenbank geschickt werden:
Da 1 immer true ist ist der hintere Teil der WHERE Bedingung erfüllt. Es werden also automatisch ALLE Datensätze zurückgegeben die in der Datenbank sind. Möchte man nur den ersten Datensatz haben den MySQL findet - z.B. um sich einzuloggen - so nutzt man
als Benutzernamen. Jetzt wird man - sofern im Script keine weitere Prüfung stattfindet - automatisch als der erste gefundene Benutzer angemeldet (das Beispiel kann mit ein paar Modifikationen auch bei aktivem magic_quotes funktionieren)
Um einen solchen Angriff zu verhindern kann man nur dafür sorgen dass 1. der Passwortvergleich im PHP Script stattfindet und nicht bereits über den MySQL Query und 2. man konsequent dafür sorgt, dass alle möglichkeiten ein ', " oder sonstiges quot einzuschleusen dicht sind.