- ベストアンサー
PHPで「\」をDBにインサートすると「\\」になる件
宜しくお願いします。PHP初心者です。 今PHP(smartyも利用しています。)とMYSQLで新着情報のプログラムを作成しています。「タイトル」と、「本文」のフォームがあり、それをDBにインサートして表示させるというシンプル?なものです。 ページ遷移は、「フォーム記入ペ-ジ」→「確認ページ」→「登録完了ページ」というふうになっています。 フォーム記入ページで「\」と記入して確認ページに移動すると、「\\」となってしまします。 この原因が分かる方いらっしゃいましたらご教授いただけないでしょうか。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>このやり方は間違っていますでしょうか? そのやり方が普通です。あとMySQLに投げる前にはmysql_real_escape_stringでescapeするのも普通です。 http://www.php.net/manual/ja/function.mysql-real-escape-string.php
その他の回答 (2)
- inu2
- ベストアンサー率33% (1229/3720)
php.iniの magic_quotes_gpc = On となっているところを magic_quotes_gpc = Off にしてください。 Onにしていると特殊文字すべてをクオートしてくれます <form>から送られてくるものすべてを強制的にエスケープしてくれてかなり厄介な機能です まことに勝手で余計な機能ですのでOffにしておきます。 DBなどへ保存する際のSQL文などを生成するときにだけエスケープ処理すれば良いだけです。 DBへINSERTする際には、手動でクオートする必要があります。 php6で、この機能そのものが削除される予定です いまのうちに、magic_quotes_gpc = Off で慣れておけばパニックにならずにすみます。
お礼
ご教授ありがとうございます! magic_quotes_gpcについては調べてみました。 php6でなくなるというのは初めて聞きました。有難うございます(^^) 初心者として、セキュリティに関して、基本からしっかり勉強しなくてはいけないと実感しました。 有難うございました!
- SAYKA
- ベストアンサー率34% (944/2776)
特殊な記号だからエスケープされているんだね。 この辺が関連する関数。 ここを基にしらべてみて。 「escapeshellcmd」 http://jp.php.net/manual/ja/function.escapeshellcmd.php
お礼
早速のアドバイス有難うございます!! 恥ずかしい限りですが、「escapeshellcmd」という関数を初めて知りました。。ご教授いただき、重ねて本当に有難うございます。 今SAYKAさんからアドバイスを頂く前に、調べていたのですが、 「get_magic_quotes_gpc()」に関して何も記述していなかったので、 if ( get_magic_quotes_gpc() ) { $title = stripslashes( $title ); $comment = stripslashes( $comment ); } と書いてからsmarty側にassignしてみたら、「\」が「\\」になる不具合が直ってしまいました。 このやり方は間違っていますでしょうか?
お礼
shimix様 ご教授・ご指摘本当に有難うございます! SQLインジェクションに対しての対策、他にも対策をしっかりしてから公開します!