尝试插入时,我从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)
答案 0 :(得分:4)
听起来您遇到问题RAILO-1281,应该在3.3.1.005中修复。
“RAILO-1281:在使用CFScript执行INSERT查询时”新查询()“并使用 cfqueryparam与addParam(),结束“)”被删除“
另外,您应该对所有动态值使用addParam
。
答案 1 :(得分: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"));
答案 2 :(得分:0)
不确定这是否是您的问题,但是对所有变量使用addParam是个好主意,而不仅仅是sql Injection风险。
确保它们以正确的格式正确传递,并且还有一个良好的习惯。也许我错了,但是#createODBCDateTime#
不需要在mySql的单引号内吗? addParam会为你做这件事。