这是我的代码:
var qryStr = "
UPDATE templates_email
SET title = :title, test_emails = :testEmail, body = :body
WHERE id = :templateID";
q = New Query();
q.setSQL(qryStr);
q.addParam(name="title", value="#arguments.title#", cfsqltype="cf_sql_char");
q.addParam(name="body", value="#arguments.templateContent#", cfsqltype="cf_sql_char");
q.addParam(name="testEmail", value="#arguments.test_emails#", cfsqltype="cf_sql_char");
q.addParam(name="templateID", value="#arguments.id#", cfsqltype="cf_sql_integer");
return q.execute().getResult();
Run Code Online (Sandbox Code Playgroud)
这是错误:
在指定的参数列表中找不到参数'body WHERE'
SQL:UPDATE templates_email SET title =:title,test_emails =:testEmail,body =:body WHERE id =:templateID
错误发生在C:\ ColdFusion9\CustomTags\com\adobe\coldfusion\query.cfc:第108行
我只能假设我使用参数构建SQL的方式有问题,但无法解决它的问题.谁能看到我在这里做错了什么?
Mar*_*del 13
获取params的解析器不会在返回值上进行标记,仅在空格上(这实在很烦人).请尝试以下方法:
var qryStr = "
UPDATE templates_email
SET title = ( :title ), test_emails = ( :testEmail ), body = ( :body )
WHERE ( id = :templateID )
";
Run Code Online (Sandbox Code Playgroud)
在(和)应删除与解析器不能够识别在其中的任何问题:PARAMS停止和启动.
发生此错误是由于在SQL语句中找到了制表符和换行符。我通常在SQL语句的函数下面运行以删除这些字符。
string function cleanSQL(required string sqlStatement)
output="false"
{
return trim(reReplace(arguments.sqlStatement, "\t|\n", " ", "all"));
}
Run Code Online (Sandbox Code Playgroud)
因此,您的setSQL()如下所示:
q.setSQL(cleanSQL(qryStr))
Run Code Online (Sandbox Code Playgroud)
或者简单地:
q.setSQL(reReplace(qryStr, "\t|\n", " ", "all"))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2830 次 |
| 最近记录: |