【问题标题】:mysQL Query help regarding find text关于查找文本的 mySQL 查询帮助
【发布时间】:2010-05-11 14:35:58
【问题描述】:

我需要获取 eventname 字段包含此文本的所有行(包括单引号)

's Birthday

我试过了,但它给出了错误:

select * from fab_scheduler where eventname like '%\'s Birthday%'

我如何构造这样的查询?

谢谢

【问题讨论】:

  • 查看您的用户名,我可以肯定地说mysql_real_escape_string(请参阅下面的答案)也可以在 PHP 中使用:php.net/manual/en/function.mysql-real-escape-string.php :-)
  • @Jon:是的,你是对的,完全忘记了这一点......无论如何,谢谢。

标签: php sql mysql escaping


【解决方案1】:

如果你打算在你的 SQL 中包含 's,你需要escape它:

有几种方法可以包含 引用字符串中的字符:

  • 用“'”引用的字符串中的“'”可以写成“''”。
  • 用“"”引用的字符串中的“"”可以写成“""”
  • 在引号字符前加上转义字符 (“\”)
  • 用“””引用的字符串中的“'”不需要特殊处理,并且 不需要加倍或转义。在里面 同样的,“””在一个被引用的字符串中 带“'”不需要特殊处理。

此外,如果您在程序中构建 SQL,您应该强烈考虑使用 mysql_real_escape_string 或在您的编程语言中的等效项来转义进入 SQL 查询的变量。否则,您的应用程序将容易受到控制所述变量数据源的任何人的 SQL 注入攻击(可能是您的用户;请记住,“您的用户”可能意味着“整个互联网”,具体取决于具体情况)。

编辑:引用上面的 dev.mysql.com 说明。

【讨论】:

    【解决方案2】:

    要么使用双引号,要么转义单引号。

    select * from fab_scheduler where eventname like "%'s Birthday%"
    
    select * from fab_scheduler where eventname like '%''s Birthday%'
    

    【讨论】:

      【解决方案3】:
      select * from fab_scheduler where eventname like "%'s Birthday%"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-11-07
        • 2011-07-19
        • 2011-04-28
        • 1970-01-01
        • 2011-04-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多