Ошибка SQL с «новым запросом ()» в скрипте ColdFusion / Railo - PullRequest
2 голосов
/ 15 февраля 2012

Я получаю очень бесполезную ошибку SQL от Railo при попытке сделать вставку. Я думаю, что это как-то связано с: значениями параметров, которые я передаю; например, когда я вынимаю их и заменяю их простой строкой, это работает.

Вот мой код (который находится внутри 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! И, как упоминалось ранее ... SQL, кажется, работает, когда я заменяю их: значения параметров.

Есть ли что-то, что я здесь делаю неправильно? Выдернуть мои волосы!

Спасибо, Майкл.

EDIT:

Забыл упомянуть, версия Railo:

Railo 3.3.1.000 Error (database)

Ответы [ 3 ]

4 голосов
/ 15 февраля 2012

Звучит так, как будто вы испытываете проблему RAILO-1281 , которую следует исправить в 3.3.1.005.

"RAILO-1281: при выполнении запроса INSERT с CFScript" new query () "и использовании cfqueryparam с addParam (), конец ")" удален "

В качестве отступления следует использовать addParam для всех динамических значений.

0 голосов
/ 15 февраля 2012

Не уверен, что это ваша проблема, но рекомендуется использовать addParam для всех ваших переменных, а не только для рисков SQL-инъекций.

Он гарантирует, что они передаются правильно с правильным форматированием, а также обеспечивает соблюдениехорошая привычкаМожет быть, я ошибаюсь по этому поводу, но не нужно ли #createODBCDateTime# заключаться в одинарные кавычки для mySql?addParam сделает это за вас.

0 голосов
/ 15 февраля 2012

Попробуйте это

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")); 
...