2012-08-03 74 views
0

表单提交后,调用javascript函数。 JS检查是否有任何数据输入到字段中。成功时,加载此CF页面。该页面是ajax负载,这就是为什么我没有使用#form.value#。sql in Coldfusion中从oracle中选择

查询是什么搞砸了我。

<cfset fieldList = url.searchFields> 
<cfset fieldArray = listToArray(fieldList)> 
<!--- The fieldArray has the form field names and values in a one-dimensional array 
so every odd index is a title and every even index is a value. Hence the step=2 --- 
<cfloop index="testing" from="1" to=#ListLen(fieldList)# step="2"> 
    <cfif fieldArray[testing] is 'searchID'> 
     <cfset itemid = fieldArray[testing + 1]> 
     <cfoutput>itemid = #itemid#</cfoutput> 
    </cfif> 
    <cfif fieldArray[testing] is 'searchName'> 
     <cfset itemtitle = fieldArray[testing + 1]> 
     <cfoutput>itemtitle = #itemtitle#</cfoutput> 
    </cfif> 
    <cfoutput>#fieldArray[testing]# #fieldArray[testing + 1]#</cfoutput> 
</cfloop> 

    <cfquery name="searchItems" datasource="#thedb#"> 
     SELECT * 
     FROM spp_items 
     WHERE avail_mode LIKE '0' 
     <cfif isDefined('url.categoryID')> AND categoryid = #url.categoryID#</cfif> 
     <cfif isDefined('itemid')> AND itemid = #itemid#</cfif> 
<!--- if I comment this next line out, the query works fine ---> 
     <cfif isDefined('itemtitle')> AND itemtitle LIKE #itemtitle#</cfif> 
    </cfquery> 

为什么不工作我的查询:我已经通过了代码的其余部分多次,有当itemtitle行被添加到查询错误是唯一的时间运行?再次,我已经检查过表单submit,js函数和coldfusion语法都是有效的。只有当这行被添加到查询中时,它才会中断。谢谢。

+0

itemtitle的值是否包含单引号?否则,你会从Oracle得到一个语法错误。另外,你会得到什么错误?如果你不容易看到,要么使用Fiddler观看AJAX调用,要么你只从CF获得500错误,尝试添加检查日志或在代码顶部插入 barnyr 2012-08-03 12:28:37

+0

您也可以考虑在此查询中使用cfqueryparam,因为它有助于消除输入 – barnyr 2012-08-03 12:29:39

回答

2

看代码,我不能看到你周围的itemtitle值加上引号,它看起来像你当前正在执行一条线,它看起来像:

AND itemtitle LIKE something 

代替:

AND itemtitle LIKE 'something' 
+0

啊!我知道这是愚蠢的!我花了数小时的时间...我会在一分钟内接受你的回答。你知道为什么它现在只在表单字段完全匹配时才起作用吗?不应该“匹配”匹配任何匹配的字符,而不仅仅是匹配整个单词吗? – 2012-08-03 12:32:56

+2

只有当你给它“%”的通配符时,所以如果你想在字符串b中的任何地方找到字符串,那么你需要'LIKE'%something%'' – 2012-08-03 12:35:12

+0

你是最棒的。谢谢。 – 2012-08-03 12:35:34