2012-02-15 1 views
2

Я получаю очень бесполезную ошибку SQL от Railo при попытке сделать вставку. Я думаю, что это имеет какое-то отношение к параметрам: param, которые я передаю ему; поскольку, когда я беру их и заменяю их простой строкой, это работает.Ошибка SQL с «новым запросом()» в скрипте ColdFusion/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.

Вот ошибка 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, похоже, работает, когда я их заменяю: значения param.

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

Thanks, Michael.

EDIT:

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

Railo 3.3.1.000 Error (database) 

ответ

4

Похоже, что вы испытываете проблему RAILO-1281, которая должна быть исправлена ​​в 3.3.1.005.

"RAILO-1281: When doing a query INSERT with CFScript "new query()" and using a cfqueryparam with addParam(), the end ")" is removed"

Как и в сторону, вы должны использовать addParam для всех динамических значений.

+0

Хорошо спасибо. Я вернусь к использованию ХФУ на основе тегов.Я пробовал использовать cfscript, но я считаю, что это еще не все. Ну что ж! Спасибо за информацию. –

+0

Btw, помимо обновления комментариев, упоминается исправление, которое вы можете легко применить к вашему файлу 'query.cfc' довольно легко. Но это зависит от вас. – Leigh

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")); 
+0

Это, кажется, ничего не разрешает, но вместо этого создает другую ошибку: \t Параметр 2 функции right должен быть теперь положительным числом [0]. Я также попытался вручную удалить интервал; не повезло. –

0

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

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

+0

Я не думаю, что это вызывает проблему, поскольку запрос работал, когда я просто удалял все значения: param. Дата вводится в тип столбца даты/времени, поэтому он не является varchar и, таким образом, освобождается от необходимости иметь котировки вокруг него, я думаю. –

+0

@MichaelGiovanniPumo См. Это сообщение: http://stackoverflow.com/questions/8551940/mysql-insert-datetime-into-other-datetime-field синтаксическая ошибка, вызванная НЕ использованием одинарных кавычек. Также см. Официальную документацию. http://dev.mysql.com/doc/refman/5.1/en/date-and-time-literals.html И еще одна ссылка на требование одинарных кавычек: http://stackoverflow.com/questions/5452124/inserting- integer-and-datetime-from-php-to-mysql-5-0-db-error –

+0

@Jonathan - Это относится к дате * строк *. 'createODBCDate' возвращает объект datetime *, который обрабатывается по-разному. Объекты Datetime не должны быть одинарными кавычками (на самом деле их добавление вызывает синтаксическую ошибку). – Leigh

Смежные вопросы