当SQL中的值包含撇号时如何修复错误

问题描述:

我正在使用Firebird SQL语句更新表中的字符串,并使用用户键入的信息。但是,如果用户输入的字符串有一个撇号,则会产生错误,因为SQL语法不再正确读取。当SQL中的值包含撇号时如何修复错误

我想我可以读取字符串并删除撇号的所有实例,但我想知道是否有更简单的方法。

{编辑2017年17月} 我使用火鸟2.5(如称为Ostendo的一个软件程序的一部分)

下面是代码的提取物:

UpdatedMsg := frmPOLineNotesMemo.Lines.text; 
SQLUpdateStr := 'update ASSEMBLYLINES set LINENOTES = LINENOTES || '''+ UpdatedMsg +''' Where SYSUNIQUEID = ' + AssyPropertyLine + ''; 
ExecuteSQL(SQLUpdateStr); 

frmPOLineNotesMemo.Lines.Text是用户通过表单输入的信息。

+0

请给我们一个[MCVE](https://*.com/help/mcve)给出一些输入,演示这个问题,并请列出Firebird的版本。一般来说,如果可能的话,您不希望从用户输入中删除“奇怪”的字符 - 毕竟“国王十字”需要它的撇号 - 但您希望安全地编码它们。根据您的界面或Firebird的绑定,有几种方法可以做到这一点。 – pilcrow

+8

使用参数化的SQL - 这是正确和简单的方法。 – ain

+4

你应该真的显示你的代码。从您的描述中,您的代码容易受到SQL注入的影响。您应该**从不**将值连接到查询字符串中,**总是**使用参数。参数删除SQL注入风险。 –

您需要将字符串中的撇号加倍。 这里发现:https://firebirdsql.org/manual/qsg10-firebird-sql.html

但请记住评论。用户输入应该作为参数传递以避免安全问题。