PHPからSET NAMESを使わない方が良い理由と対策まとめ | twk @ ふらっと
MySQL4なサバでは使ったりしてましたが。。
SQLの実行により文字コードが変更されるように思えるが、PHPのMySQL関連の関数で考慮される文字コードは変更されない。このため、エスケープ関数mysql_real_escape_string()等で、必要なエスケープがなされず脆弱性を引き起こすケースがある。
とのこと。mysql_set_charset()のほうを使おう!とのことです。
使いたい文字コードがShift_JISなら
入力文字列が正しい文字コードかチェックして、その上で自前のエスケープ用の関数を通せばOK
文字コードのチェックにはmb_check_encoding()またはmb_convert_encoding()を使えば良い。
自前のエスケープ用の関数では、Shift_JISの x00, n, r, , ‘, ” そして x1a をエスケープすれば良いはず。
これは良い情報ですね。古いPHPでShift_JIS使う時には覚えておこう。