0

在我正在做的网站上,用户可以输入搜索字符串,例如

 "do you have foo bar"

我正在使用 Coldfusion8 创建一个 | 分隔的列表,如下所示:

<cfif len(LOCAL.Search.s_artikelbezeichnung) GT 0>
    <cfloop list="#LOCAL.Search.s_artikelbezeichnung#" delimiters=", " index="terms">
        <cfset variables.searchTerms = variables.searchTerms & terms & '|'>;
    </cfloop>   
    <cfset variables.searchTerms = Left(variables.searchTerms, len(variables.searchTerms)-1)>
</cfif>

这应该给我:

 do|you|have|foo|bar    // param_artikelbezeichnung

在MySQL中,我正在做一个正则表达式:

...
AND ( (param_artikelbezeichnung = '') AND (1=1) 
    OR (
        a.artikelbezeichnung REGEXP param_artikelbezeichnung 
        )

我的问题:
我必须在变量周围添加引号 '' 还是可以这样输入?我有一堆动态条件需要添加到搜索中,所以我正在寻找一些一般信息。

感谢帮助!

编辑
好的,这就是我从数据库中得到的:

  a.artikelbezeichnung REGEXP param_artikelbezeichnung 
     >> using foo|bar OK
  a.artikelbezeichnung REGEXP param_artikelbezeichnung
     >> not passing a value > ERROR

所以我不需要引号,但我需要将一些东西传递给正则表达式,以免在空字段上产生错误。像这样的工作:

   AND ( (param_artikelbezeichnung = '') AND (0=1) 
      OR (  a.artikelbezeichnung REGEXP param_artikelbezeichnung )

几乎是另一个问题。谢谢回答!

4

2 回答 2

1

根据mysql doc,您需要将搜索字符串/正则表达式放在单引号中,如下所示:

AND ( (param_artikelbezeichnung = '') AND (1=1) 
    OR (
        a.artikelbezeichnung REGEXP 'do|you|have|foo|bar'
        )

否则会在 mysql 中产生语法错误。


更新:

由于您处于存储过程中,因此您可以这样做。对于其他读者:param_artikelbezeichnung是coldfusion调用的存储过程的一个参数。

SELECT COUNT(a.id) AS recs, a.artikelnummer, a.nos, a.nos_anzeige
FROM artikel AS a
WHERE a.aktiv = 'ja'
AND a.artikelbezeichnung REGEXP IF(artikelbezeichnung = '', '.', artikelbezeichnung )
于 2012-06-26T08:37:13.400 回答
0

如果你把它放在引号中,引擎会将它视为一个字符串,否则它在该行的值。

于 2012-06-26T08:29:45.143 回答