Aus irgendeinem Grund müssen wir auch einen Backslash maskieren also.
Der richtige Code wäre also, glaube ich
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();
}
}
Verwenden Sie für die Ausgabe
echo htmlspecialchars($_GET['q']);
Stripslashes werden hier nicht benötigt.
magische Anführungszeichen werden Ihrer Sicherheit nicht schaden, wenn Sie sie nicht verwenden.
Zeichensatz ist im Falle einiger extrem seltener Codierungen gefährlich, aber nur, wenn er falsch gesetzt ist. wenn mysql(i)_set_charset
oder DSN (bei PDO) verwendet wurden - Sie sind wieder sicher.
Wie für PDO, ein Tag Wiki sollte für den Anfang reichen, glaube ich