何らかの理由で、バックスラッシュをエスケープする
つまり、適切なコードは次のようになると思います
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については、タグウィキ 初心者には十分なはずだと思います