エスケープしても、MySQLに格納されるのは本来のデータである件

わかってしまえば当たり前のことなんですが(^^;;)、果てしない思い違いをしていたのでメモしておきます。



経緯

デバッグ用にとりあえず本番でも使えるデータをExcelで予め大量に用意し、phpMyadminを通じてCSVで一度にインポートしようと思いました。


ところでphpSQLを書いてデータを叩き込むには、mysql_real_escape_stringエスケープする必要があります。


そこでphpMyadminでインポートするとき、エスケープしてくれるかどうかわからなかったので、あれこれ調べはじめました。


この段階では、エスケープしたSQLでデータを叩き込んだ場合、エスケープされた文字がそのままMySQLに記録されると思っていました。つまりMySQLに入れる時にエスケープ、取り出す時には案エスケープ(?)が必要かと思っていたのです。


ですから、万一phpMyadminでインポートしたデータがエスケープされない場合、記録されるデータが異なり、後々PHPで叩き込んだデータとphpMyadminで叩き込んだデータが本来同じであっても違うデータとして扱われてしまうのではないかと懸念したのでした。

結論

杞憂でした。
MySQLエスケープが必要なのは、記録する段階の問題ではなく、SQLで操作する段階の問題です。したがって、操作する段階でエスケープしたデータをSQLで送り込むと、記録された段階では本来のデータとしてアンエスケープ(?)して記録される、ということなのでしょう(根拠をみつけられませんでした)。
だから矛盾は生じない。


プラグイン制作でハマッたよ[4](Nucleusだとか)
 http://datoka.jp/old/nuc/tips/870.html
MySQLから値を取り出したときのアンエスケープ方法


そもそもphpMyadminだってphpSQL書いてySQLを操作するわけですから、必要であればエスケープしているはず……ですよねぇ(未確認)。


さっさとインポートしよっと。