Solo las declaraciones preparadas proporcionan escape automático, suponiendo que no tenga alguna fealdad como las comillas mágicas habilitadas. Y solo se escapan los datos en los parámetros, nada que ya esté en la cadena SQL cuando prepara la declaración.
Si desea los beneficios del escape automático, deberá preparar una declaración y alimentarla con los datos por separado.
$sth = $dbh->prepare("SELECT * FROM users WHERE username=? AND password=?");
$sth->execute(array($username, $password));
De lo contrario, obtiene poca o ninguna protección sobre mysqli_query
y amigos. (Me niego a siquiera mencionar mysql_query
, porque ningún programador de PHP que se precie lo usa más. Oh, espera... maldición. Bueno, esa es la única mención que recibe aquí).