【发布时间】:2012-01-10 07:55:49
【问题描述】:
当我尝试下面的 SQL 命令时,我得到了 sql 错误。
INSERT INTO exampleTbl VALUES('he doesn't work for me')
其中不包含撇号。
将带有 '(撇号)的文本插入 SQL 表的方法是什么。
【问题讨论】:
标签: sql sql-server-2005
当我尝试下面的 SQL 命令时,我得到了 sql 错误。
INSERT INTO exampleTbl VALUES('he doesn't work for me')
其中不包含撇号。
将带有 '(撇号)的文本插入 SQL 表的方法是什么。
【问题讨论】:
标签: sql sql-server-2005
我知道这个问题是针对撇号字符的直接转义,但我认为通常这将由某种提供输入的程序触发。
在我使用过的脚本和程序中,我所做的普遍做法是在处理输入文本的格式时将其替换为 ` 字符。
现在我知道在某些情况下,反引号字符实际上可能是您可能要保存的内容的一部分(例如在这样的论坛上),但如果您只是保存用户的文本输入,这是可能的解决方案。
进入 SQL 数据库
$newval=~s/\'/`/g;
然后,当回来显示时,再次过滤如下:
$showval=~s/`/\'/g;
这个例子是在使用 PERL/CGI 时,但它也可以应用于 PHP 和其他基础。我发现它运作良好,因为我认为它有助于防止可能的注入尝试,因为在尝试插入记录之前,所有 ' 都已删除。
【讨论】:
在 SQL 中,这样做的方法是将撇号加倍:
'he doesn''t work for me'
如果您以编程方式执行此操作,则应使用接受参数并为您转义它们的 API,例如准备好的语句或类似的,而不是转义并使用字符串连接来组装查询。
【讨论】:
insert into table1 values("sunil''s book",123,99382932938);
在单撇号内使用双撇号, 它会工作
【讨论】:
$value = "he doesn't work for me";
$new_value = str_replace("'", "''", "$value"); // it looks like " ' " , " ' ' "
INSERT INTO exampleTbl (`column`) VALUES('$new_value')
【讨论】:
是的,由于 sql 注入攻击,sql server 不允许在表字段中插入单引号。所以我们必须在保存时用double替换单撇号。
(他不为我工作)必须是 =>(他不为我工作)
【讨论】:
如果您想在文本中显示单引号,可以使用反斜杠“\”。
INSERT INTO exampleTbl VALUES('He doesn't(\')t') ;
【讨论】:
INSERT INTO exampleTbl VALUES('he doesn''t work for me')
如果您通过 ASP.NET 添加记录,则可以使用 SqlParameter 对象来传递值,这样您就不必担心用户输入的撇号。
【讨论】:
试试这个
INSERT INTO exampleTbl VALUES('he doesn''t work for me')
【讨论】: