1年くらい前に社内MLに投げた、「MySQLでSET NAMESを使ってはいけない理由」をコピペしてみます。手抜きです、はい。 赤字は注釈です。 今更ながら、「MySQLで SET NAMES を使ってはいけない」の根拠のお話です。 下記のPHPスクリプトでは、入力値を元にSQL文を生成し、検索クエリを投げています。 ※sqltestというDBには、カラムnameを持つuserテーブルが存在します。 GETで渡された値はきちんとmysql_real_escape_stringをかけているので、SQLインジェクションは出来ないように見えます。 しかし、http://localhost/sqltest/index.php?name=%95%5c'%20OR%201=1%20--%20にアクセスすると、全部のデータが見えてしまいます。 下にあるPHPスクリプトを、localhost/sqltes