某些字符當建立一個文本搜索到一個網站,我將其通過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