ロリポップサーバーのMYSQL
以前作成した、商品レビューページなんだけど動作重いなぁ。。。
MYSQL使ってデータをクエリしてるんだけど、長い時だと10秒くらい時間かかる。早ければ1秒程度なんだけど。アクセス数増えてきたら絶対無理くさいな。
やっぱXMLでデータ管理して上手い具合にやったほうが安定するのかなぁ。
TOPページ > カテゴリ別表示 : SQL
本文開始▼
以前作成した、商品レビューページなんだけど動作重いなぁ。。。
MYSQL使ってデータをクエリしてるんだけど、長い時だと10秒くらい時間かかる。早ければ1秒程度なんだけど。アクセス数増えてきたら絶対無理くさいな。
やっぱXMLでデータ管理して上手い具合にやったほうが安定するのかなぁ。
先日ブログで取り上げた、PHP+XMLで作った商品レビューページを改良して、ついに公開しました。
http://ks-product.com/items.php
PHP+XMLからPHP+MYSQLに変更したことで、データ数の上限が増加及び検索機能がプラスされました。MYSQLの扱い(インデックスとか)があんまり理解できてないので、DBの処理が遅いかも。
肝心のレビューがまだほとんどありませんが。。。ちょくちょく更新していくつもりでいるので宜しくです。ちなみに、レビューできるのは管理人だけという仕様になっています。(個人では管理しきれない。。。)
PHPからMYSQLにクエリする際は、特殊文字をエスケープするわけだが、ではアンエスケープはいつするのか。
答えは、MYSQLにクエリした辞典で自動的にアンエスケープされる(っぽい)。
考えてみれば、クエリするときにだけインジェクション攻撃される可能性があるわけだから、データベース内ではエスケープしておく必要は無いわけだ。
PHP等のスクリプトからMYSQLなどのデータベースに接続しクエリする場合、\n, \r, \, ', "などの文字列をエスケープする必要があります。上記文字列はSQLでは特別な意味を持つためです。(HTMLでいう < や > に相当。)
エスケープを行う為の関数がいくつか用意されているので、自力でエスケープする必要はありません。また、サーバー側で「magic_quotes_gpc」の設定がonになっている場合は自動でエスケープされます。
しかし、magic_quotes_gpcやエスケープ関数addslashesはインジェクション攻撃による脆弱性があるらしいので使わない方が無難らしい。(インジェクション攻撃とは、HTMLのフォームなどから不正なデータを送信し、不正アクセスなどをすること。)
エスケープするにはmysql_real_escape_string()関数を使用するのが無難っぽい。ただし、magic_quotes_gpcがonになっていると2重でエスケープ処理されてしまうので、.htaccessで設定を無効にするか、stripslashes()関数でエスケープ文字を取り除く。ただ、mysql_real_escape_string()関数を使っても万全ではないらしい。SHIFT-JISを使用するとヤバいらしい。
本文終了▲