【问题标题】:Way to insert text having ' (apostrophe) into a SQL table将具有 '(撇号)的文本插入 SQL 表的方法
【发布时间】:2012-01-10 07:55:49
【问题描述】:

当我尝试下面的 SQL 命令时,我得到了 sql 错误。

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

其中不包含撇号。

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

【问题讨论】:

    标签: sql sql-server-2005


    【解决方案1】:

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

    在我使用过的脚本和程序中,我所做的普遍做法是在处理输入文本的格式时将其替换为 ` 字符。

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

    进入 SQL 数据库

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

    然后,当回来显示时,再次过滤如下:

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

    这个例子是在使用 PERL/CGI 时,但它也可以应用于 PHP 和其他基础。我发现它运作良好,因为我认为它有助于防止可能的注入尝试,因为在尝试插入记录之前,所有 ' 都已删除。

    【讨论】:

      【解决方案2】:

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

      'he doesn''t work for me'
      

      如果您以编程方式执行此操作,则应使用接受参数并为您转义它们的 API,例如准备好的语句或类似的,而不是转义并使用字符串连接来组装查询。

      【讨论】:

      • 如果您从程序后端执行此操作,请使用参数化查询。您实际上看到这里发生了 SQL 注入攻击。
      【解决方案3】:
      insert into table1 values("sunil''s book",123,99382932938);
      

      在单撇号内使用双撇号, 它会工作

      【讨论】:

        【解决方案4】:
        $value = "he doesn't work for me";
        
        $new_value = str_replace("'", "''", "$value"); // it looks like  " ' "  , " ' ' " 
        
        INSERT INTO exampleTbl (`column`) VALUES('$new_value')
        

        【讨论】:

        • 这不是关于 PHP,而是关于 SQL
        【解决方案5】:

        是的,由于 sql 注入攻击,sql server 不允许在表字段中插入单引号。所以我们必须在保存时用double替换单撇号。

        (他不为我工作)必须是 =>(他不为我工作)

        【讨论】:

        • “由于sql注入攻击,sql server不允许在表字段中插入单引号”是不正确的理解。
        【解决方案6】:

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

        INSERT INTO exampleTbl VALUES('He doesn't(\')t') ;

        【讨论】:

        • 是否需要在 \' 周围使用左括号
        • 反斜杠不是在 SQL Server 中转义的正确方法
        【解决方案7】:
        INSERT INTO exampleTbl VALUES('he doesn''t work for me')
        

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

        【讨论】:

          【解决方案8】:

          试试这个

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

          【讨论】:

            猜你喜欢
            • 2016-04-16
            • 2015-07-04
            • 1970-01-01
            • 1970-01-01
            • 2011-10-09
            • 1970-01-01
            • 2020-04-27
            • 2016-12-13
            • 1970-01-01
            相关资源
            最近更新 更多