【问题标题】:SQL to Query text in access with an apostrophe in itSQL 查询访问中带有撇号的文本
【发布时间】:2011-10-09 12:03:33
【问题描述】:

我正在尝试在 Access 数据库中的列名 tblStudents 中查询一个名称 (Daniel O'Neal),但是 Access 报告了以下语句的语法错误:

Select * from tblStudents where name like 'Daniel O'Neal'

由于名称中的撇号。

我该如何克服这个问题?

【问题讨论】:

    标签: sql ms-access


    【解决方案1】:

    你通过加倍来逃避',所以:

    Select * from tblStudents where name like 'Daniel O''Neal' 
    

    请注意,如果您从用户输入中接受“Daniel O'Neal”,则引用错误是一个严重的安全问题。您应该始终清理字符串或使用参数化查询。

    【讨论】:

    • 出于好奇,Alex 为什么引号的转义会导致安全问题?
    • @RichardSpencer 在某些情况下,如果您传递包含未转义的 ' 字符的字符串变量,然后使用它们来构造 SQL 语句,您将面临 SQL 注入攻击en.wikipedia.org/wiki/SQL_injection
    【解决方案2】:

    当您在查询中包含字符串文字时,您可以将字符串括在单引号或双引号中; Access 的数据库引擎也可以接受。所以双引号可以避免包含单引号的字符串的问题。

    SELECT * FROM tblStudents WHERE [name] Like "Daniel O'Neal";
    

    如果您想在字符串周围保留单引号,可以将其中的单引号加倍,如其他答案中所述。

    SELECT * FROM tblStudents WHERE [name] Like 'Daniel O''Neal';
    

    注意 name 周围的方括号。我使用方括号来减少混淆数据库引擎的机会,因为 namereserved word

    不清楚您为什么在查询中使用 Like 比较。根据您所展示的内容,这应该可行。

    SELECT * FROM tblStudents WHERE [name] = "Daniel O'Neal";
    

    【讨论】:

      【解决方案3】:

      通过编写O''Neal(两个撇号)来转义O'Neal 中的撇号。

      【讨论】:

        【解决方案4】:

        ...最好将名称声明为变量,并在字符串中是否有撇号之前询问:

        例如:

        DIM YourName 字符串

        你的名字 = “丹尼尔·奥尼尔”

          If InStr(YourName, "'") Then
              SELECT * FROM tblStudents WHERE [name]  Like """ Your Name """ ;
           else
              SELECT * FROM tblStudents WHERE [name] Like '" Your Name "' ;       
          endif
        

        【讨论】:

        • 如果我的名字是Daniel"O'Neal,那又怎样?
        【解决方案5】:

        更简单的方法:Select * from tblStudents where [name] = replace(YourName,"'","''")

        【讨论】:

        • 欢迎来到 Stack Overflow!感谢您提供此代码 sn-p,它可能会提供一些有限的短期帮助。一个正确的解释would greatly improve 其长期价值,通过展示为什么这是解决问题的好方法,并将使其对未来有其他类似问题的读者更有用。请edit您的回答添加一些解释,包括您所做的假设。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-14
        • 2017-08-07
        • 1970-01-01
        • 2010-11-23
        • 2018-03-17
        相关资源
        最近更新 更多