2011-09-15 29 views
1

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

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工作得很好。如果模式不包含反斜杠,则正则表达式查询将起作用。如果它包含一个反斜杠,它会起作用,但从表中返回的数据缺少反斜杠。即使查询找到正确的记录。感谢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

而你在'select * from documentinfo WHERE num ='35910''上得到了什么? –

+0

它会正确返回文件名中的反斜杠。 –

回答

2

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

+0

谢谢,但结果是一样的,查询工作至于找到正确的记录。然而,返回的数据已被修改,反斜杠和一些其他字符,他们似乎“逃脱”已被删除...之前,我从正则表达式或类似的查询结果,但不是从=查询谢谢!橡木 –