[EC-CUBE][さくら]mysql_real_escape_stringで化ける

概要

さくらインターネットのレンタルサーバに設置したEC-CUBEの「商品検索」や「顧客検索」など、2バイト文字を使った検索がうまくいかない問題があったので、調査、対応した。

問題点

ソースを追っていくとどうやらSC_Utils->sfManualEscapeにあるようで、引数の$dataには検索した文字列がそのまま入っているが、$ret = mysql_real_escape_string($dada)の$retでおかしくなってしまう。よって、原因はmysql_real_escape_string()にあることがわかった。

mysql_real_escape_stringはMySQLのcharacter set clientの文字コードを参照してエスケープ処理を行うらしく*1 、さくらインターネットのDBを確認してみるとこの値が”ujis”になってた。。
この後対応方法を書くが、それで直ったということはそういうことなんだろう。

対応方法

SC_DbConnのコンストラクタのDBとの接続を確立する箇所に

mysql_set_charset("utf8");

を追加することで、この問題が解消した。

PHP: mysql_set_charset – Manual

参考:mysql_real_escape_string

あとがき

正直、さくらインターネットのレンタルサーバはEC-CUBEには向かないっすTT
SAKURA Internet : サポート/お問合せ : オンラインマニュアルにも書かれてますが、.htaccessに書かれたphp_flagとかphp_valueは効きません。エラーになります。
この辺はphp.iniで対応できるからいいですが、今回のはmysqlの設定ですよね。my.confいじれればいいんですがそれも無理。
仕方がないのでphpのソース側で対応しましたがこんなものはmysql側で対処すべきことですよね。

あとは、メールの設定でも引っかかったなぁ。
書いたかどうか忘れたけど、メール送信設定をsmtpにするとメール送れません。正確に言うと、サーバとドメインと同じメールアドレスには送信できるけどそれ以外は送れない。これは僕の手落ちだけど、サーバにアップしてから社内でテストしてもらったらちゃんとメール飛んでるのに運用始まったら飛ばないというwあせるしw
テスト段階ではそれぞれ自分の会社のメールアドレスで登録していたので、この問題が再現しなかったんですよね^^;

なんか他にもあったような気がしますが、思い出したらまた書くことにします。(思い出した。モバイル関係だ。でもまた今度にしよう。)

  1. ソース見失ったので自信がないけどたぶん… []
スポンサーリンク
336x280_1
336x280_1

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク
336x280_1