Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql Coldfusion CFQUERY w/内部联接和日期格式不起作用_Mysql_Coldfusion_Cfml_Lucee - Fatal编程技术网

Mysql Coldfusion CFQUERY w/内部联接和日期格式不起作用

Mysql Coldfusion CFQUERY w/内部联接和日期格式不起作用,mysql,coldfusion,cfml,lucee,Mysql,Coldfusion,Cfml,Lucee,我正试着去处理连接、mysql和coldfusion。以下查询在没有最后一个条件的情况下工作 <cfquery name="GetWeekends"> SELECT w.id, w.weekend_type, w.community_id, w.start_date, w.end_date, w.language, c.community_id, c.location, c.language, c.state,

我正试着去处理连接、mysql和coldfusion。以下查询在没有最后一个条件的情况下工作

        <cfquery name="GetWeekends">
        SELECT w.id, w.weekend_type, w.community_id, w.start_date, w.end_date,
          w.language,
          c.community_id, c.location, c.language, c.state, c.country
        FROM _weekends w
        INNER JOIN _communities c
        ON w.community_id=c.community_id
        WHERE w.weekend_type = 1 AND w.start_date > Now() AND           
        #DateFormat(w.start_date, "m")# = '#form.home_by_month#'
        ORDER BY w.start_date ASC
        </cfquery>

告诉我变量[W]不存在。抱歉,我在这里学习…

感谢Sterling Archer,工作解决方案是:

<cfquery name="GetWeekends">
    SELECT w.id
           , w.weekend_type
           , w.community_id
           , w.start_date
           , w.end_date
           , w.language
           , c.community_id
           , c.location
           , c.language
           , c.state
           , c.country
    FROM   _weekends w INNER JOIN _communities c ON w.community_id = c.community_id
    WHERE w.weekend_type = 1 
    AND   w.start_date > Now() 
    AND   MONTH(w.start_date) = '#form.home_by_month#'
    ORDER BY w.start_date ASC
</cfquery>
这里的问题是DateFormat是一个ColdFusion函数,不能与MySQL变量w一起应用。您需要使用MySQL的MONTH函数,并将日期传递到该函数中

不要忘记清理表单输入,因为SQL注入非常容易影响表单输入。像这样使用:


评论太长了

由于您刚刚提到CF,了解一下CF如何处理数据库查询可能有助于理解错误发生的原因以及在cfquery中可以和不能执行的操作类型

尽管CF可以与数据库引擎进行通信,但两者是完全独立的,并且使用完全不同的语言。在cfquery标记中可以混合使用CFML和SQL这一事实给人一种错误的印象,即CF函数可以对数据库对象进行操作,反之亦然。他们不能。CF服务器对数据库对象一无所知,数据库引擎也不理解CFML。首先在CF服务器上处理查询标记中的任何CFML代码。然后将生成的SQL发送到数据库引擎,并单独执行

当CF服务器遇到数据库查询时,它会解析标记内容,查找必须计算的CFML变量或表达式,即:

SELECT Column FROM Table WHERE ColA = '#form.someField#' AND ColB = '#form.otherField#'
然后,它将这些变量和表达式转换为文字值,即字符串、数字等。最后,CF将生成的SQL字符串交给数据库引擎执行,即:

SELECT Column FROM Table WHERE ColA = 'John Smith' AND ColB = 'ABC'

因此,CF在DateFormatw.start_date,m上阻塞的原因是它不理解w.start_date引用数据库列。它认为它是一个CF变量的名称:特别是一个名为w的结构,包含关键的开始日期。显然不存在这样的变量。因此出现了未定义的错误。

通过“死在”是否意味着它会出现错误?是的,变量[W]不存在。因此,我强烈建议使用cfquery param来清理变量。我很确定你不需要在查询标签中使用OctorThorps,但是我已经有一年多没有使用过cfquery了。啊,我不认为你可以对这样的查询应用非SQL函数,我需要得到月份I,e。1,2,3,4,5,6,7,8,9,10,11或12个w.start_date,作为日期存储在MySQL中-并将其与我在表单中传递的内容进行比较。home_by_monthi如果这是您的解决方案,您应该采纳Sterling的建议,也使用cfqueryparam。在数据库查询中发送参数时总是使用CFQuyPARAM。此外,在一个月而不是一年中进行过滤会导致意想不到的结果。此外,如果您正在搜索特定月份和年份的记录,请考虑使用,这当然比使用月份更灵活——更不用说索引友好了。当然,丹。在这个查询中,我实际上是在寻找某个特定月份的结果,而不是年份。Edit@mck-Yes,如果您是在寻找未来任何一年的某个特定月份,那么这就是对月份的合法使用。顺便说一句,不确定它在这种情况下是否相关,但请记住现在包括日期和时间。因此,比较将排除日期相同但时间较早的记录。这是语言变量和数据库变量如何在查询中共存的一个很好的解释。还有,你好,李!谢谢,斯特林。在某些方面,它类似于在同一个脚本中混合客户端JS和服务器端代码CF。仅仅因为可以混合使用它们,并不意味着CF服务器可以执行客户端代码,反之亦然-
SELECT Column FROM Table WHERE ColA = '#form.someField#' AND ColB = '#form.otherField#'
SELECT Column FROM Table WHERE ColA = 'John Smith' AND ColB = 'ABC'