某些字符当建立一个文本搜索到一个网站,我将其通过PHP循环:忽略DB2 SELECT语句
$queryList=explode(' ', $queryString);
foreach ($queryList as $queryParm) {
foreach ($fields as $key => $query) {
$whereStr.=($key == 0) ? " AND (ucase($query) LIKE ?" : " OR ucase($query) LIKE ?";
$db->parms[]="%$queryParm%";
if ($key+1 == count($fields)) $whereStr.=")";
}
}
这将分开查询的话,使每一个单独的参数。我正在构建一个正则表达式,只允许字母数字加空格,但现在问题是我需要SQL来匹配这个正则表达式,例如如果有一个项目名为“FakeCo的独角兽推斥剂#123”,然后搜索“fakecos独角兽驱虫剂123“应该产生结果,忽略”'“和”#“存在的事实。实际上由于清单的结构“123 fakeco”也应该显示结果。
有没有办法将正则表达式应用于DB2语句?
这是被撞上了DB2对我(版本7.1)
编辑:尝试性解决方案(插入这个PHP上述前),一些字符造成&不得不被删除,表现不佳的时候它没有运行
问题$sqlNeedsEscape=array("?", "'");
$ignoreChars="'\"[email protected]#$%^&*()-=+[]{}|<>,./\\";
$ignoreChars=str_split($ignoreChars);
$whereBefore='';
$whereAfter='';
foreach ($ignoreChars as &$ic) {
if (in_array($ic, $sqlNeedsEscape)) $ic="'$ic";
error_log($ic);
$whereBefore.="replace(";
$whereAfter.=",'$ic','')";
}
然后$whereStr.=
线改变为:
$whereStr.=($key == 0) ? " AND (ucase(trim($whereBefore $query $whereAfter)) LIKE ?" : " OR $whereBefore ucase(trim($query)) $whereAfter LIKE ?";
有效它被更换(更换(替换(查询,'!',''),'@',''),'#',''),只能包括几个替换。当我看到它对性能的影响时,我不再追逐这个想法。我会和我们的角色扮演开发者讨论Buck Calabro建议的UDF解决方案。这听起来像是唯一可能的“真实”解决方案。
你想过使用专用引擎的数据映射如奇妙[ElasticSearch](http://www.elasticsearch.org)?作为Java,它甚至可以在IBM i上本地运行。 – jamesallman