Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php mysql中特殊字符的处理_Php_Mysql - Fatal编程技术网

Php 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('/[^

我有两个mysql表
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分钟运行一次作业以填充任何空字段。然后随着时间的推移,逐步重构代码以使用未编码列。