php mysql结果反斜杠被删除

时间:2011-09-15 21:22:40

标签: php mysql regex

我有一个包含文件名和其他信息的表。当我运行以下查询时:

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来显示这个:

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

查询任何num的工作就好了。如果模式不包含反斜杠,则regexp查询有效。如果它包含反斜杠它可以工作,但从表返回的数据缺少它的反斜杠。即使查询找到了正确的记录。感谢Oak

问题是:character_set_results 正则表达式查询是否默认返回不同的字符集结果,然后是a = query?


我尝试了以下更改字符集以查看发生了什么:

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>';

它总是表示latin1

我使用mysql_set_charset('utf8');并将其更改为utf8,但结果没有变化。

1 个答案:

答案 0 :(得分:2)

MySQL将反斜杠字符解释为转义字符。对于查询中的反斜杠,请使用双反斜杠\\