如何使用 coldfusion 或 mssql 在字符串中加倍单引号(替换不起作用并且不能使用 cfparam)
How to double singlequotes in a string using coldfusion or mssql (Replace not working and can't use cfparam)
我收到一个包含以下内容的查询:
INNER JOIN
com
ON
com.company_id = pi.company_id
AND com.company_name LIKE '%TUTTO PER L'UFFICIO%'
coldfusion 显示此错误:
Incorrect syntax near 'UFFICIO'
我该如何解决这个问题?
P.S。不能使用 cfparam 因为这不在查询中(在 <cfsavecontent variable = "sql_query"> ... </cfsavecontent>
)
当您的 SQL 字符串在变量中时,为了缓解 SQLi,CF 将自动转义字符串中的任何单引号。这是对 SQL 语句的正确做法,但是如果您还在 SQL 语句中硬编码了数据值(您不应该这样做!),这很可能会导致您遇到的问题看到了。
您确实应该从 SQL 语句中提取数据值,因为它们放错地方了。
如果您不能或不愿意正确地做到这一点,您可以使用 preserveSingleQuotes()
功能解决这个问题,例如:
<cfquery>
#preserveSingleQuotes(sqlStatementString)#
</cfquery>
您可以放置双单引号来转义引号。
INNER JOIN
com
ON
com.company_id = pi.company_id
AND com.company_name LIKE '%TUTTO PER L''UFFICIO%'
我收到一个包含以下内容的查询:
INNER JOIN
com
ON
com.company_id = pi.company_id
AND com.company_name LIKE '%TUTTO PER L'UFFICIO%'
coldfusion 显示此错误:
Incorrect syntax near 'UFFICIO'
我该如何解决这个问题?
P.S。不能使用 cfparam 因为这不在查询中(在 <cfsavecontent variable = "sql_query"> ... </cfsavecontent>
)
当您的 SQL 字符串在变量中时,为了缓解 SQLi,CF 将自动转义字符串中的任何单引号。这是对 SQL 语句的正确做法,但是如果您还在 SQL 语句中硬编码了数据值(您不应该这样做!),这很可能会导致您遇到的问题看到了。
您确实应该从 SQL 语句中提取数据值,因为它们放错地方了。
如果您不能或不愿意正确地做到这一点,您可以使用 preserveSingleQuotes()
功能解决这个问题,例如:
<cfquery>
#preserveSingleQuotes(sqlStatementString)#
</cfquery>
您可以放置双单引号来转义引号。
INNER JOIN
com
ON
com.company_id = pi.company_id
AND com.company_name LIKE '%TUTTO PER L''UFFICIO%'