Php mysql中特殊字符的处理
我有两个mysql表Php mysql中特殊字符的处理,php,mysql,Php,Mysql,我有两个mysql表property和building。在property表中,我有一个名为unitnumber的字段,该字段中的值类似于1a,2b等。。在building表中,我有一个名为address的字段,它是PHP的urlencoded格式。该值类似于26+Dovedale+Place%2C+Parnell 现在我想实现一个搜索功能,这样当用户键入1a,26 Dovedale时,我需要从数据库中调出结果 到目前为止已实施: $keyword = preg_replace('/[^
property
和building
。在property
表中,我有一个名为unitnumber
的字段,该字段中的值类似于1a
,2b
等。。在building
表中,我有一个名为address
的字段,它是PHP的urlencoded
格式。该值类似于26+Dovedale+Place%2C+Parnell
现在我想实现一个搜索功能,这样当用户键入1a,26 Dovedale
时,我需要从数据库中调出结果
到目前为止已实施:
$keyword = preg_replace('/[^a-zA-Z0-9-]/', '', $_REQUEST['keyword']);
$keyword = str_replace(" ", "-", $keyword);
$a->rqNotEmpty('keyword', $keyword);
$query = "SELECT * FROM `buildings` b left join properties p on p.buildingId=b.id
WHERE concat(p.floor,p.number,b.address) LIKE '%".$keyword."%'
or concat(p.number,p.floor,b.address) LIKE '%".$keyword."'";
但现在的问题是,当我准备$keyword
变量时,我会得到类似1a26Dovedale
的值,在CONCAT
之后的数据库中,该值将是类似1a26+Dovedale+Place%2C+Parnell
的值。我无法对$keyword进行URL编码,因为数据库不是标准格式。数据库my的地址之间有2个空格。那么有没有一种方法可以urldecode
mysql字符串??我在这里处理近400万张唱片 您可以尝试安装MySQL UDF(用户定义函数),在MySQL中提供urlencode()
和urldecode()
函数。以下是链接:您可以尝试安装MySQL UDF(用户定义函数),以在MySQL中提供urlencode()
和urldecode()
函数。下面是链接:为什么数据库中的数据是编码的?从DB IMO中提取数据后(如有必要)应立即执行此操作。也许您可以对$关键字
进行URL编码?如果您正在使用MyISAM,还可以尝试在地址上创建全文索引。通过搜索这样的通配符,您必须进行一次完整的表扫描(如果您没有太多记录,可能没什么大不了的)。您将花费比修复一次所需的更多的时间来处理这种格式的数据。这只是你挣扎的开始,你的用户会对被加载的图像“分心”感到非常厌倦。祝你好运。如果可能的话,全文索引可以同时解决这两个问题。老实说,我不是100%确定FT索引将如何处理URL编码,但你可能会很幸运。与其更改它,不如添加另一列,复制数据(解码后),然后对该列进行搜索。如果需要,可以每10分钟运行一次作业以填充任何空字段。然后随着时间的推移,逐步重构代码以使用未编码列。为什么数据库中的数据是编码的?从DB IMO中提取数据后(如有必要)应立即执行此操作。也许您可以对$关键字
进行URL编码?如果您正在使用MyISAM,还可以尝试在地址上创建全文索引。通过搜索这样的通配符,您必须进行一次完整的表扫描(如果您没有太多记录,可能没什么大不了的)。您将花费比修复一次所需的更多的时间来处理这种格式的数据。这只是你挣扎的开始,你的用户会对被加载的图像“分心”感到非常厌倦。祝你好运。如果可能的话,全文索引可以同时解决这两个问题。老实说,我不是100%确定FT索引将如何处理URL编码,但你可能会很幸运。与其更改它,不如添加另一列,复制数据(解码后),然后对该列进行搜索。如果需要,可以每10分钟运行一次作业以填充任何空字段。然后随着时间的推移,逐步重构代码以使用未编码列。