- ベストアンサー
array_mapを使ったエスケープ処理
MYSQLとPHPでアプリケーション作成している初心者です。 今まで一つ一つの項目をmysql_real_escape_stringに通していたのですが今日、array_mapという関数がある事を知りました。 今まで自分がやっていたように項目毎に data1 = mysql_real_escape_string($_POST['data1']); data2 = mysql_real_escape_string($_POST['data2']); ...(省略) とするのは項目が増えれば増えただけ作業量も増えてしまうので $postdata = array_map("エスケープ関数",$_POST); としてPOSTされたデータは一括してエスケープ用関数を通そうかと思っています。 参考書などでこのような方法でエスケープ処理をしているのを見た事が無いの不安なのですが(googleで調べると結構やっている人がいました)、このやり方で何かデメリットはあるでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
特にデメリットは無いと思いますが、処理不要な物も含めて$_POSTの中全部を処理してしまうということで、無駄な処理を避けたくて個別にやるんでしょう。 >とするのは項目が増えれば増えただけ作業量も増えてしまうので 人間の手間を減らすか、コンピュータの手間を減らすかの違い。 ちなみに、SQL処理で望ましいのは、自分で個別にescapeするんじゃなくて、PDOかPEAR::DBのprepareとexecuteを使ってescapeをライブラリに任せる方法だと思います。
その他の回答 (1)
- yambejp
- ベストアンサー率51% (3827/7415)
> array_map("エスケープ関数",$_POST); $_POSTデータを一律にarray_mapしてしまうと、エスケープ不要な データもエスケープされますよね? 可読性は若干はよくなりますが結局フロー的に無駄は多いのでは? それにある意味foreachループとも変わらないような気がしますし
お礼
お返事遅くなってすみません。 確かに処理しないデータまでエスケープしてしまいますね。 私が今やっているものは個人レベルで単純にフォームに入力された内容をINSERTやUPDATEするようなものなので便利だと思ったのですが、大規模なシステムになるとそのような無駄も大きく影響しそうですね。 やはり一つ一つ処理するクセをつける事にします。 お返事ありがとうございました。
お礼
お返事遅くなってすみません。 >人間の手間を減らすか、コンピュータの手間を減らすかの違い。 納得致しました。ありがとうございます。 >ちなみに、SQL処理で望ましいのは、自分で個別にescapeするんじゃなくて、PDOかPEAR::DBのprepareとexecuteを使ってescapeをライブラリに任せる方法だと思います。 PERAは便利だと良く聞くのですが、使った事が無く、折角なのでこの機会に色々調べてみようかと思います。 このような次につながるヒントを与えて頂けるのは凄くうれしいです。 お返事ありがとうございました。