1

我有一个查询,它从文本框中获取文本并将其输入到数据库中。

如果该值类似于TaylorO'Neill由于撇号给出语法错误而出现错误,则它可以正常工作unclosed quotation mark

有没有办法将O'Neill撇号添加到数据库中?

我不想用双单引号替换它,我希望它按照它显示的那样放入数据库中。

谢谢

4

4 回答 4

2

如果您使用双单引号,您的数据库中不会出现双单引号。你最终只会得到一个单引号

引号只是一种在 SQL 语句中转义引号的方法。因此,当您执行以下操作时:

> insert into your_table (name) values ('O''neil');

该值O'neil实际上将被插入到数据库中。

如果您的数据库是PostgreSQL,还有其他操作字符串的方法。例如使用$$

> insert into your_table (name) values ($$O'neil$$);

将插入O'neil数据库。

于 2010-11-25T18:22:02.243 回答
2

您可能想查看Microsoft 模式和实践文档中的步骤 4. 使用 SQL 查询的命令参数。这不仅可以解决您的报价问题,还可以防止 SQL 注入攻击和其他非常糟糕的事情发生。

于 2010-11-25T18:24:22.190 回答
1

您可以通过将撇号加倍 ( '') 来转义撇号 - 将插入一个撇号。

因此,插入O''Neill将导致O'Neill插入数据库。

但是,您需要这样做的事实表明您正在使用对SQL 注入攻击开放的嵌入式 SQL 。

如果您使用参数化查询,您将不会那么容易受到攻击,并且您不需要求助于转义撇号。

于 2010-11-25T18:22:20.853 回答
1

您可以使用双 '' 提交您的 SQL 查询就好了,数据库识别转义字符并只保存一个。

为什么你不想要双单引号解决方案?

于 2010-11-25T18:24:27.627 回答