我有一个将Clob数据保存到数据库中的应用程序。假设当我在文本框中输入一些文本,然后单击“保存”。它将调用一个过程,该过程会将此文本(Clob)插入数据库表中。
假设我有以下文字:
嗨,我是高拉夫的索尼
现在,我的过程将此Clob数据作为:
insert into rtf_clob(1,'Hi i am gaurav's soni's');
但是,这将引发错误。
如何处理来自前端的动态数据中的单引号? 我正在使用oracle作为RDBMS。
您不应该编写代码来转义字符串。您需要转义字符串的事实意味着您做错了什么。
如果您在INSERT语句中使用绑定变量,则在有单个单引号的情况下就无需转义字符串。如果您不使用绑定变量,也无需尝试识别字符串中的SQL注入攻击,这是一个巨大的安全问题。而且,您不会强迫Oracle在每次执行查询时都对查询进行解析,这对系统性能至关重要。
INSERT
如果您要讨论的过程是用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
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();