如何在SQL语句中转义撇号?

时间:2015-03-10 10:19:23

标签: sql coldfusion escaping

不要讨论SQL注入和清理等等......

由于各种原因,我正在进行无法实现的操作,并且在不使用查询参数的情况下构建和执行动态SQL查询。

所以...我正在构建列列表和值列表,然后我有以下代码:

insertRecord.setSql("INSERT INTO MyTable(" & columns & ") VALUES(" & values & ")");

这适用于大多数记录,但对于一些记录,其中一个字符串字段值有一个撇号或单引号:

'SHERIFF'S OFFICE'

这给了我SQL错误:Incorrect syntax near 'S'.

我尝试过以多种方式使用保留单引号,但没有帮助:

insertRecord.setSql("INSERT INTO MyTable(" & columns & ") VALUES(" & preserveSingleQuotes(values) & ")");

OR

insertRecord.setSql(PreserveSingleQuotes("INSERT INTO MyTable(" & columns & ") VALUES(" & values & ")"));

有没有办法逃避所有撇号,或以其他方式正确格式化我的sql字符串,而不是在每个值上单独使用ReplaceNoCase(colValue, "'", "''"),因为我正在构建字符串(这确实有用)?

1 个答案:

答案 0 :(得分:1)

我不确定setSql语句的语法,但也许你缺少字符串值的单引号。你试过添加吗?

我的意思是这个。假设SQL语句需要看起来像这样(注意每个值周围的引号):

INSERT INTO MyTable 
(column1, column2, column3) 
VALUES 
('value 1', 'value 2', 'value 3')

然后setSql语句应如下所示:

insertRecord.setSql("INSERT INTO MyTable (column1, column2, column3) VALUES ('value 1', 'value 2', 'value 3')");

所以你可以尝试类似的东西(注意值周围的单引号):

insertRecord.setSql("INSERT INTO MyTable(" & columns & ") VALUES('" & preserveSingleQuotes(values) & "')");

您可能还需要遍历每个values,以便将每个{{1}}括在单引号中。