插入具有单引号的数据时出错

时间:2011-11-18 20:15:21

标签: sql oracle plsql oracle9i

我有一个将clob数据保存到数据库中的应用程序。 假设我将一些文本放入文本框然后单击“保存”。 它将调用一个将此文本(clob)插入数据库表的过程。

假设我有以下文字:

  

你好我是gaurav的soni's

现在我的程序将此clob数据作为:

insert into rtf_clob(1,'Hi i am gaurav's soni's');

然而这会引发错误。

如何处理来自前端的动态数据中的单引号?
我正在使用oracle作为RDBMS。

2 个答案:

答案 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'');