2

尝试插入时,我从 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's。

这是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)
4

3 回答 3

4

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

“RAILO-1281:当使用 CFScript “new query()” 执行查询 INSERT 并使用带有 addParam() 的 cfqueryparam 时,末尾“)”被删除”

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

于 2012-02-15T18:45:31.953 回答
0

尝试这个

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")); 
于 2012-02-15T17:23:37.210 回答
0

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

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

于 2012-02-15T17:32:12.643 回答