プロが教える店舗&オフィスのセキュリティ対策術

Sqlite3にて

列名やデータ内で使えない文字列(記号等の文字コード)を教えてください。

調べてみた情報では
改行や区切り文字などの基本的なことしか見つかりませんでしが

実際に使っていると、半角スペース等が混入している場合
全てではありませんが、データベース内で明らかに存在するのに検索できないなどの場合
があるようです。

一つずつ調べてエスケープ処理をすることは現実的に不可能なので
独自にエスケープ処理等を書かれている方に

どのような文字列をエスケープしていますでしょうか?

A 回答 (2件)

「なでしこ」ですか、、、プリペアドステートメント-プレースホルダーにも対応していないのかな?



>データベース内で明らかに存在するのに検索できない
エスケープ処理よりも、文字コードの問題が大きいような気がします。
SQLiteは、SQL文内の文字列として解釈できれば、基本どんなバイナリーデータもそのまま受け入れてしまうのですけど、検索やソートの時に、sjis やeucでは、バイト列がずれてマッチしたりしてうまくいきません。
SQLite3 なら、utf-8には対応してるので、utf-8でなら概ねうまく検索されます。
「なでしこ」でどの文字コードが使われているのか解りませんが、utf-8で保存し、検索時のデータ指定もutf-8でSQL文を構築、取り出し後、表示用の文字コードに変換という手順が必要です。

エスケープ処理について、phpマニュアルでの、sqlite_ecsape_string() 関数(SQLite2用)の説明によれば、文字列データのくくりは、シングルクオート(')の方を使うようにし、データ内のシングルクオート(')は2重にしてるようです。たしか標準SQL規格準拠の動作。
そのほかのバイナリー文字は、たぶん バックスラッシュ(\ 0x5c) を付加かな。
でも、SQLite3では、プリペアドステートメント推奨となっています。
    • good
    • 0
この回答へのお礼

回答を元に色々調べて試してみましたが
なでしこ側の文字コードの問題があるようで、データベース検索処理の部分を別の言語で処理するようにいたしました。
回答ありがとうございました。

お礼日時:2012/01/30 20:18

何らかのプログラミング言語を使っていると思いますが、マイナーな言語で無い限りSqlite3用のライブラリがあって、それがそのあたりの面倒を見てくれます。

自分でエスケープする処理を書くのは間違いの元なのでだめです。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
なでしこと言う言語を使っており、Sqliteの文字エスケープのライブラリが無いのです。

お礼日時:2011/12/03 21:05

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す