Scriptella中的特殊字符,jexl

时间:2012-11-12 15:28:36

标签: mysql jexl scriptella

我想从数据库中提取文本字段并将其插入到其他数据库中。因此,在提取时,我在选择测试时使用了REPLACE(message_text,'\'','“')。我给了我一个错误。我从select语句改变了它,并在启动全局变量时执行了操作。 etl.globals ['message_text'] = message_text;

我仍然在插入语句中收到错误

insert into lcs_al_user_likes(user_id,liked_user_id,post_content,loop_id) values('${etl.globals['posted_by']}','${etl.globals['liked_user_id']}','${etl.gl‌​obals['message_text']}',?batchLoopCounter); 

*您的SQL语法检查中出现错误,与您的MySQL服务器版本对应的手册,以便在第1行的'message_text']}')'附近使用正确的语法*

我认为它没有获得全局变量。我说的是因为当我使用log打印它的值时它只给了我

$ {etl.globals [ 'MESSAGE_TEXT']}

作为输出。所以请帮帮我。

<query connection-id="lcsDBConnection"> 
     SELECT forum_topic_post_id AS forum_topic_post_id, posted_by AS posted_by,message_text as message_text FROM lcs_tbl_forum_topic_post WHERE like_count>0 LIMIT ?batchSize OFFSET ?queryCounter ; 
     <script connection-id="jexl"> 
         etl.globals['forum_topic_post_id'] = forum_topic_post_id; 
         etl.globals['posted_by'] = posted_by; 
         etl.globals['message_text'] = message_text.replace('\'', '"'); 
     </script> 

1 个答案:

答案 0 :(得分:0)

看起来问题出在INSERT语句中,你应该使用预准备语句 参数转义:

INSERT INTO lcs_al_user_likes(user_id,liked_user_id,post_content,loop_id) values(?{etl.globals['posted_by']},?{etl.globals['liked_user_id']},?{etl.gl‌​obals['message_text']},?batchLoopCounter); 

BTW据我所知,你原来的问题是引用了破坏insert语句的引用,因此在这种情况下使用?{parameter}语法你根本不需要使用replace(...)函数。