Само подготвените изрази осигуряват автоматично магическо избягване, ако приемем, че нямате активирана грозота като магически кавички. И само данните в параметрите се екранират, а не всичко, което вече е в SQL низа, когато подготвяте израза.
Ако искате да се възползвате от предимствата на автоматичното избягване, ще трябва да подготвите извлечение и да му подадете данните отделно.
$sth = $dbh->prepare("SELECT * FROM users WHERE username=? AND password=?");
$sth->execute(array($username, $password));
В противен случай получавате малка или никаква защита над mysqli_query
и приятели. (Отказвам дори да спомена mysql_query
, защото нито един уважаващ себе си PHP програмист вече не го използва. О, чакай... по дяволите. Е, това е единственото споменаване тук.)