Ошибка SQL с "новым запросом ()" в скрипте ColdFusion / Railo
Я получаю очень бесполезную ошибку 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, кажется, работает, когда я заменяю их: значения параметров.
Есть ли что-то, что я здесь делаю неправильно? Выдернуть мои волосы!
Спасибо, Майкл.
РЕДАКТИРОВАТЬ:
Забыл упомянуть, версия Railo:
Railo 3.3.1.000 Error (database)
3 ответа
Похоже, у вас возникла проблема RAILO-1281, которая должна быть исправлена в 3.3.1.005.
"RAILO-1281: при выполнении запроса INSERT с CFScript "new query()"и использовании cfqueryparam с addParam() конец")"удаляется"
В сторону, вы должны использовать addParam
для всех динамических значений.
Не уверен, что это ваша проблема, но это хорошая идея использовать addParam для всех ваших переменных, а не только для рисков SQL инъекций.
Это гарантирует, что они передаются правильно с правильным форматированием, а также обеспечивает хорошую привычку. Может быть, я ошибаюсь по этому поводу, но не #createODBCDateTime#
нужно быть в одинарных кавычках для mySql? 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"));