- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:これでSQLインジェクション対策できてますか??)
SQLインジェクション対策としてのmysql_real_escape_string()の効果
このQ&Aのポイント
- SQLインジェクション対策として、mysql_real_escape_string()を使用してGETした文字列をエスケープ処理しています。
- タイトルでは30文字前後で、SQLインジェクション対策の効果を確認するためのmysql_real_escape_string()の使用が説明されています。
- 要約文では100文字程度で、GETした文字列をmysql_real_escape_string()で囲むことによる大丈夫かどうかの確認が行われています。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
ちなみにざっと書くとこんな感じですね 先頭と後尾を除く$usersearchに含まれる「半角スペース」か「全角読点(、)」 「半角カンマ(,)」を使ってセパレートする なおWHEREは常に「WHERE 1」をつけるようにしてください それにANDでつなげば無駄なフローをはぶけます <?PHP $sql = "SELECT * FROM king WHERE 1"; $usersearch= ",aaa b、ccc,ddd , , , eee "; $pattern="/^[,、\s]+|[,、\s]+$/"; $usersearch = preg_replace($pattern,'',$usersearch); $pattern="/[,、\s]+/"; $search_words = preg_split($pattern,$usersearch); foreach ((array) $search_words as $word) { $sql.=" AND syou LIKE '%".mysql_real_escape_string($word)."%'"; } print $sql; //LIMIT句は省略 ?>
その他の回答 (1)
- yambejp
- ベストアンサー率51% (3827/7415)
回答No.1
mysql_real_escape_stringするのはクエリに投入する直前が望ましいです。 余談ですが、LIKEの検索にANDでつないでますがそうなると 両方の条件に合致しないとヒットしませんがよろしいのですか? またたとえば出現順なども有効にするのであればもう少し書き方がかわってきます。
補足
詳しいありがとうございます。大変助かります。