- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:SQLite3:: escapeString使用法)
SQLite3::escapeStringの使用法とは?
このQ&Aのポイント
- SQLite3クラスのメソッドescapeStringを使って、SQL文の中に挿入する文字列の浄化(SQLインジェクション対策)をする方法について教えてください。
- 具体的には、指定した文字列をエスケープして安全に使用するために、SQLite3データベースをオープンし、escapeStringメソッドを呼び出すことが一般的です。
- ただし、文字列の浄化だけを行いたい場合には、必ずしもデータベースをオープンする必要はありません。その場合は、:memory:を指定することで一時的なデータベースを作成します。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
>とりあえず文字列の浄化だけを行いたい場合 この意味がわかりません。データベース固有のエスケープは文字列をデータベースに格納する直前に行うべき処理です。「とりあえず」やる必然性がありません。 htmlspecialcharsをブラウザに返す直前に通すのと同じです。htmlspecialcharsした状態で保持する意味なんてありませんよね。逆に『2回通して』しまって壊してしまう可能性が増えるだけです。
お礼
回答をありがとうございます。 やはり、つっこまれてしまいましたね。(笑) えっと、私は以前から、 プリペアドステートメント(PDO::prepare)を使って、 SQL文を作成していたのですが、 それでも、そのSQL文の作成時には、 エスケープ処理は必要なのだと、 これまで誤解しており、 そのため、今回、この、PDO::prepareを使った処理の間に、 SQLite3:: escapeString を使ったエスケープ処理を、 挟み込もうとしていました。 つまり、この方法ですと、 浄化をする時には既に、PDO経由で、 使用するDBはオープンされているわけなので、 改めて、 new SQLite3($db); でもって、 DBをオープンすることはないだろ、 と、私は考えたわけです。 しかし、今回、皆さんから、 上記のプリペアドステートメントでSQL文を作成していれば、 「その時点で、エスケープ処理の問題は既に解決済みだよ!」(←間違ってたら教えて下さい。照) ということを教わりましたので、 今後も、引き続き、 SQLite3クラスの「escapeString」ではなく、PDO::prepareを使って、 セキュアーに「SQLite3のDB」を使用していけたらと考えています。 以上、また何か変なことを言っていましたら(笑)、 また、よろしければ、教えてください。