2013-10-23 321 views
-1
<cfquery name="result" datasource="Training"> 
     select TE.firstname,TE.lastname,TD.deparmentname,TE.salary,TE.DateOfBirth 
     from TEmployee as TE 
     inner join Tdepartment as TD 
     on TE.departmentID=TD.departmentID 
     where 1 = 1 
     <cfif isdefined('form.fname') AND len(form.fname) gt 0 > 
     AND TE.FirstName Like '#Form.fname#%' 
     </cfif> 
     <cfif isdefined('form.lname') AND len(form.lname) gt 0> 
     and TE.LastName Like '#Form.lname#%' 
     </cfif> 
     <cfif isdefined('form.dept') AND form.dept neq 0> 
     and TD.DeparmentName='#form.dept#' 
     </cfif> 

     <cfif isdefined('form.salary') AND ListLen(Form.salary,'-') EQ 2> 
     and TE.salary between #ListGetAt(Form.salary,1,'-')# AND #ListGetAt(Form.salary,2,'-')# 
     </cfif> 

     <cfif isdefined('form.hidetxt') AND Len(form.hidetxt) GT 0> 
      order by #form.hidetxt# 
     </cfif> 
    </cfquery> 
    <cfdump var="#result#"> 
      <cfoutput> 
      <cfquery dbtype="query" name="detail"> 
       select top 2 * 
        FROM result 
        WHERE 1=1 
         <cfif isdefined('form.hidetxt') AND Len(form.hidetxt) GT 0> 
            order by #form.hidetxt# 

         </cfif> 
      </cfquery> 
     </cfoutput> 
     <cfdump var="#detail#"> 

错误排在前2位。但是这个查询在数据库中工作。我在这做了什么错误。第二个查询错误发生在“select top 2 *”中。该写些什么错误:查询查询语法错误

+0

我不知道我明白这里的倒票。 –

+4

与你的错误没有任何关系,但你不应该在数据库查询(或客户端提供的任何值)中使用原始的'form'值,因为它会将你的数据库暴露给sql注入。请改用[cfqueryparam](http://help.adobe.com/zh_CN/ColdFusion/9.0/CFMLRef/WSc3ff6d0ea77859461172e0811cbec22c24-7f6f.html)。 – Leigh

回答

4

TOP不是QoQ的SQL实现的一部分。使用<cfquery>标记上的maxrows属性。