Z jakiegoś powodu potrzebujemy także uciec odwrotnego ukośnika też.
Właściwy kod byłby więc, jak sądzę
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();
}
}
Aby uzyskać dane wyjściowe, użyj
echo htmlspecialchars($_GET['q']);
paski ukośne nie są tutaj potrzebne.
magiczne cytaty nie zaszkodzą Twojemu bezpieczeństwu, jeśli ich nie użyjesz.
charset jest niebezpieczny w przypadku niektórych niezwykle rzadkich kodowań, ale tylko wtedy, gdy jest niewłaściwie ustawiony. jeśli mysql(i)_set_charset
lub DSN (w przypadku PDO) zostały użyte do tego celu - znów jesteś bezpieczny.
Jeśli chodzi o PDO, tag wiki powinien wystarczyć na początek, jak sądzę