ColdFusion / Railo 脚本中"new query()"的 SQL 错误



在尝试插入时,我从Railo收到了一个非常无用的SQL错误。我认为这与我传递给它的:param值有关;当我把它们取出来,用一个简单的字符串替换时,它就起作用了。

这是我的代码(位于CFC中):

local.registerUserQuery = new query();
            local.registerUserQuery.setDatasource("popwave");
            local.registerUserQuery.setSQL("
                INSERT INTO users (
                    userUUID,
                    userName,
                    userPassword,
                    userEmail,
                    userToken,
                    userCreated,
                    userBiography,
                    userCommentPoints,
                    userLinkPoints,
                    userImageID,
                    userRemoved,
                    userCategoriesOwner,
                    userCategoriesSubscribed
                )
                VALUES (
                    '#createUUID()#' , 
                    :userName , 
                    :userPassword , 
                    :userEmail , 
                    '#local.token#' , 
                    #createODBCDate(now())# , 
                    '' , 
                    0, 
                    0, 
                    0, 
                    0, 
                    0, 
                    0 
                )
            "); 
            local.registerUserQuery.setName("registerUser");
            local.registerUserQuery.addParam( name="userName", value="#arguments.userName#", cfsqltype="cf_sql_varchar" ); 
            local.registerUserQuery.addParam( name="userPassword", value="#arguments.userPassword#", cfsqltype="cf_sql_varchar" ); 
            local.registerUserQuery.addParam( name="userEmail", value="#arguments.userEmail#", cfsqltype="cf_sql_varchar" );
            local.registerUserQuery.execute();

我一辈子都不明白为什么这是一个错误!我需要能够使用:param。

这是Railo的错误:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 49

检查这个行号似乎并没有指向任何相关的东西。这个查询大约在第200行!而且,如前所述。。。当我替换这些:param值时,SQL似乎可以工作。

我真的做错了什么吗?把我的头发拔出来!

谢谢,迈克尔。

编辑:

忘了提一下,Railo的版本是:

Railo 3.3.1.000 Error (database)

听起来您遇到了问题RAILO-1281,应该在3.3.1.005中修复。

"RAILO-1281:使用CFScript"new query()"执行查询INSERT时,使用cfqueryparam带addParam(),末尾")"已删除

顺便说一句,应该对所有动态值使用addParam

试试这个

local.registerUserQuery.setSQL(reReplace("
            INSERT INTO users (
                userUUID,
                userName,
                userPassword,
                userEmail,
                userToken,
                userCreated,
                userBiography,
                userCommentPoints,
                userLinkPoints,
                userImageID,
                userRemoved,
                userCategoriesOwner,
                userCategoriesSubscribed
            )
            VALUES (
                '#createUUID()#' , 
                :userName , 
                :userPassword , 
                :userEmail , 
                '#local.token#' , 
                #createODBCDate(now())# , 
                '' , 
                0, 
                0, 
                0, 
                0, 
                0, 
                0 
            )
        ", "t|n", " ", "all")); 

不确定这是否是您的问题,但最好对所有变量使用addParam,而不仅仅是sql注入风险。

它可以确保它们以正确的格式正确传递,并强制养成一个好习惯。也许我错了,但对于mySql,#createODBCDateTime#不需要在单引号内吗?addParam会为你做这些事情。

最新更新