2011-09-15 7 views
1

私はファイル名とその他の情報を持つテーブルを持っています。私は次のクエリを実行すると:php mysqlの結果バックスラッシュが削除されました

select * from `documentinfo` WHERE `num`='40217' 

を私は正しく結果を得る:

Array 
(
    [num] => 40217 
    [datetime] => 2011-09-15 15:22:07 
    [date] => 2011-09-15 
    [filename] => C:\redoak\DocumentsIN\Filer\8883894460_3044564210_07334802020001.mp3 
) 

私は、クエリを実行すると:

QUERY:`filename` REGEXP '^C:\\redoak\\DocumentsIN\\Filer' 

を私が手:

Array 
(
    [num] => 35910 
    [datetime] => 2010-12-03 17:34:38 
    [date] => 2010-12-03 
    [filename] => c: 
edoakDocumentsINFiler8883894460_3043926485_05863748580001.mp3 
) 

結果には\から削除されていることに注意してくださいフォルダ名。

は、私がこれを表示するには、両方で、次のPHPを使用:任意のnumの

while ($row = array_change_key_case(mysql_fetch_assoc($webquery), CASE_LOWER)) 
{ 
    print_r($row); 
} 

クエリが正常に動作します。正規表現クエリは、パターンにバックスラッシュが含まれていない場合に機能します。バックスラッシュが含まれていても動作しますが、テーブルから返されたデータにバックスラッシュがありません。クエリが正しいレコードを見つけたとしても。ありがとうオーク

問題はありますか?character_set_results regexpクエリは、デフォルトでは異なる文字セット結果を返しますか?


私は何が起こったかを確認するために文字セットを変更するには、次を試してみました:

mysql_query("SET character_set_results = 'utf8', character_set_client = 'utf8', character_set_connection = 'utf8', character_set_database = 'utf8', character_set_server = 'utf8'") or die("ERROR SETTING CHAR SET");  
echo '<pre>debug: encoding=', mysql_client_encoding(), '</pre>'; 

$webquery=mysql_query($query); 

echo '<pre>debug: encoding=', mysql_client_encoding(), '</pre>'; 

常に私がmysql_set_charset('utf8');を使用し、それがutf8に変更が、結果は変わらなかったlatin1の

を示し、 。

+1

'select * from documentinfo WHERE num = '35910''はどうですか? –

+0

ファイル名にバックスラッシュが正しく返されます。 –

答えて

2

MySQLは、バックスラッシュ文字をエスケープ文字と解釈します。クエリのバックスラッシュの場合は、ダブルバックスラッシュを使用してください。\\

+0

ありがとうございますが、結果は同じですが、クエリは正しいレコードの位置まで動作します。しかし、返されたデータが変更され、バックスラッシュと "エスケープ"するように見える他の文字が削除されました...正規表現などの検索結果を得る前に、オーク –

関連する問題