将带有'(撇号)的文本插入SQL表的方法

37

当我尝试以下SQL命令时,出现了SQL错误。

INSERT INTO exampleTbl VALUES('he doesn't work for me')

不包含撇号的位置在哪里。

如何将带有 '(撇号)的文本插入SQL表中。

8个回答

92

在SQL中,做到这一点的方法是将撇号加倍:

'he doesn''t work for me'

然而,如果您是通过编程实现此操作,您应该使用接受参数并自动为您转义它们的API。通过编程进行转义,并使用字符串连接来组装查询是确保出现SQL注入漏洞的方法。

Her daughter is named Help I'm trapped in a driver's license factory.


6
如果您是从程序后端进行此操作,请使用参数化查询。您实际上正在经历一次SQL注入攻击。 - Andrew

13
INSERT INTO exampleTbl VALUES('he doesn''t work for me')

如果您正在通过ASP.NET添加记录,可以使用SqlParameter对象传递值,这样您就不必担心用户输入的撇号。

9
$value = "he doesn't work for me";

$new_value = str_replace("'", "''", "$value"); // it looks like  " ' "  , " ' ' " 

INSERT INTO exampleTbl (`column`) VALUES('$new_value')

1
这不是关于PHP的问题,而是具体指SQL。 - Bono

6

试试这个

INSERT INTO exampleTbl VALUES('he doesn''t work for me')

1
insert into table1 values("sunil''s book",123,99382932938);

在单引号内使用双引号,这样就可以正常工作。


0

我知道这个问题的目的是直接转义撇号字符,但我认为通常情况下这将由某种程序提供输入来触发。

在我所使用的所有脚本和程序中,我普遍采用的解决方法是在处理输入文本的格式时用 ` 字符替换它。

现在我知道,在某些情况下,反引号字符实际上可能是您尝试保存的一部分(例如像这样的论坛),但如果您只是保存用户的文本输入,这是一个可行的解决方案。

进入SQL数据库

$newval=~s/\'/`/g;

然后,当再次返回显示时,会像这样再次进行过滤:

$showval=~s/`/\'/g;

这个例子是在使用PERL/CGI时,但它同样适用于PHP和其他基础。我发现它的效果很好,因为它有助于防止可能的注入尝试,因为在尝试插入记录之前,所有的 ' 都被移除了。


-2

是的,由于 SQL 注入攻击,SQL Server 不允许在表字段中插入单引号。因此,在保存时,我们必须将单引号替换为双引号。

"(他不为我工作)" 必须更改为 "(他不工作)"。


5
“SQL Server不允许在表字段中插入单引号是由于SQL注入攻击”这种说法是不正确的。 - Martin Smith

-6

如果你想在文本中显示单引号,可以使用反斜杠 '\'。

插入数据:INSERT INTO exampleTbl VALUES('He doesn(\')t') ;


需要在 ' 周围加上开放括号吗? - Nazmul
2
在SQL Server中,反斜杠并不是正确的转义方式。 - Martin Smith

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接