dポイントプレゼントキャンペーン実施中!

field char(50) binary not null unique primary key,fulltext (field)
この設定で作られたフィールドがあり、主にlike検索をされます。
このフィールドには本来10進数の数字の文字列を入力する事を考えていたのですが、(数値としては桁数が大きすぎる事と、その数字列の中に"123"を持つ物を探すなど数量とは関係無い検索がされる事から文字列にしています)
MySQLのリファレンスによると、インデックスの対象になる文字列は桁数が短い方がいいようなので、どうせ数値でなく文字列を使っているのならと思い、1バイトで表現出来る全ての文字を使い256進数で表し、桁数を節約しようと考えました。
256進数に直してしまうと10進数の状態で"ある数字列"を持つのかどうか分からなくなるのではないかと思うかもしれませんが、それはこのフィールドに行われるlike検索の特徴により解消されます。
長い前置きでしたが、質問はタイトル通り制御文字を含む文字列を扱う事、言い換えれば0~255の全ての文字コードを文字列データとしてMySQLでインサート・全文インデックス・セレクトする方法です。このフィールドのデータは出力される事は無く、selectのwhere部分に使われ、出力されるのは同レコード内の別のフィールドのデータです。
素直に以下のコードでテストしましたが失敗しました。
while ($i < 50){
$rand = mt_rand(0,255);
$str .= chr($rand);
$i++;
}/*insertする文字列$strを生成*/
$sql = "insert into table(field) values ('$str')"
$strの中に制御文字や"や'等の文字が入るとinsertが失敗し、追加出来たレコードについても、コマンドプロンプトからselectして出力してみるとPCが警告音を連発します。
何か方法は無いでしょうか?

A 回答 (1件)

エスケープすればいいでしょう。


詳しくは参考URLをどうぞ。(私が過去に回答したものです)

参考URL:http://oshiete1.goo.ne.jp/kotaeru.php3?q=1291646
    • good
    • 0
この回答へのお礼

phpのaddslashesで出来ました。
レスありがとうございました。

お礼日時:2005/04/15 21:35

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

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