Solo le dichiarazioni preparate forniscono l'escape automatico, supponendo che tu non abbia qualche bruttezza come le citazioni magiche abilitate. E solo i dati nei parametri vengono sottoposti a escape, non tutto ciò che è già nella stringa SQL quando prepari l'istruzione.
Se desideri i vantaggi dell'escape automatico, dovrai preparare una dichiarazione e fornirgli i dati separatamente.
$sth = $dbh->prepare("SELECT * FROM users WHERE username=? AND password=?");
$sth->execute(array($username, $password));
Altrimenti, hai poca o nessuna protezione su mysqli_query
e amici. (Mi rifiuto persino di menzionare mysql_query
, perché nessun programmatore PHP che si rispetti lo usa più. Oh, aspetta... dannazione. Bene, questa è l'unica menzione che arriva qui.)