По някаква причина се нуждаем също така от екраниране на обратна наклонена черта също.
И така, според мен правилният код би бил
if(isset($_GET['q'])){
$_GET['q'] = trim($_GET['q']);
if(strlen($_GET['q']) >= 2){
$q = $_GET['q'];
$q = '%'.addCslashes($q, '\%_').'%';
// now we have the value ready either for escaping or binding
$q = mysql_real_escape_string($q);
$sql = "SELECT name, age, address FROM book WHERE name LIKE '$q'";
//or
$sql = "SELECT name, age, address FROM book WHERE name LIKE ?";
$stm = $pdo->prepare($sql);
$stm->execute(array($q));
$data = $stm->fetchAll();
}
}
За изхода използвайте
echo htmlspecialchars($_GET['q']);
тук не са необходими наклонени черти.
магическите кавички няма да навредят на сигурността ви, ако не ги използвате.
Наборът от символи е опасен в случай на някои изключително редки кодировки, но само ако е неправилно зададен. ако mysql(i)_set_charset
или DSN (в случай на PDO) са използвани за целта - отново сте в безопасност.
Що се отнася до PDO, уики за етикети би трябвало да е достатъчно за начало, вярвам