我有一个将clob数据保存到数据库中的应用程序。 假设我将一些文本放入文本框然后单击“保存”。 它将调用一个将此文本(clob)插入数据库表的过程。
假设我有以下文字:
你好我是gaurav的soni's
现在我的程序将此clob数据作为:
insert into rtf_clob(1,'Hi i am gaurav's soni's');
然而这会引发错误。
如何处理来自前端的动态数据中的单引号?
我正在使用oracle作为RDBMS。
答案 0 :(得分:3)
你不应该编写代码来逃避字符串。你需要逃避字符串这一事实意味着你做错了什么。
如果在INSERT
语句中使用绑定变量,则在存在杂散单引号时不需要转义字符串。也没有必要尝试在字符串中识别SQL注入攻击,如果您不使用绑定变量,这是一个巨大的安全问题。并且您不会强制Oracle在每次执行时解析查询,这对系统性能至关重要。
如果您所讨论的过程是用PL / SQL编写的,它将自动使用绑定变量。猜测列名并假设您正在使用序列来生成主键,您将拥有类似的内容
CREATE PROCEDURE insert_rtf_clob( p_clob IN NOCOPY CLOB )
AS
BEGIN
INSERT INTO rtf_clob( rtf_clob_id, rtf_clob_value )
VALUES( seq_rtf_clob_id.nextval, p_clob );
END;
其他前端语言将使用不同的方法来使用绑定变量。例如,如果您使用JDBC编写Java,则需要创建PreparedStatement
,然后调用适当的setXXX
方法,即
PreparedStatement stmt = conn.prepareStatement( "INSERT INTO rtf_clob VALUES( ?, ? )" );
stmt.setInt( 1, 1 ); // Set column 1 to a value of 1
stmt.setString( 2, someStringVariable ); // Set column 2 to someStringVariable
stmt.executeUpdate();
答案 1 :(得分:1)
加倍': 插入rtf_clob(1,'你好我是gaurav'的soni'');