mysql通配符转义_转义MySQL通配符

mysql通配符转义_转义MySQL通配符小编典典_而%不是通配符在MySQL一般,而且不应该被转义,将它们放入普通的字符串字面量的目的。mysql_real_escape_string是正确的,足以满足此目的。addcslashes不应该使用。_并且%仅在LIKE-matching上下文中是特殊的。当您想为LIKE语句中的文字使用准备字符串时,要100%匹配百分之一百,而不仅仅是以100开头的任何字符串,都需要担心两种转义。首先是喜欢转…

大家好,又见面了,我是你们的朋友全栈君。

小编典典

_而%不是通配符在MySQL一般,而且不应该被转义,将它们放入普通的字符串字面量的目的。mysql_real_escape_string是正确的,足以满足此目的。addcslashes不应该使用。

_并且%仅在LIKE-matching

上下文中是特殊的。当您想为LIKE语句中的文字使用准备字符串时,要100%匹配百分之一百,而不仅仅是以100开头的任何字符串,都需要担心两种转义。

首先是喜欢转义。LIKE处理完全在SQL内部进行,如果要将文字字符串转换为文字LIKE表达式, 即使使用参数化查询, 也必须执行此步骤!

在此方案中,_并且%是特殊的,必须进行转义。转义字符也必须转义。根据ANSI SQL,除这些字符外, 不得

转义:\’这是错误的。(尽管MySQL通常会让您摆脱它。)

完成此操作后,您进入第二个转义级别,这是普通的旧字符串文字转义。这发生在SQL之外,创建SQL,因此必须在LIKE转义步骤之后完成。对于MySQL,这mysql_real_escape_string和以前一样。对于其他数据库,它将具有不同的功能,您可以只使用参数化查询来避免这样做。

这里引起混乱的问题是,在MySQL中,两个嵌套转义步骤都使用反斜杠作为转义字符!因此,如果要将字符串与文字百分号匹配,则必须双反斜杠转义并说出LIKE

‘something\\%’。或者,如果在PHP “文字中也使用反斜杠转义,则”LIKE ‘something\\\\%'”。啊!

根据ANSI

SQL,这是不正确的,它表示:在字符串文字中,反斜杠表示文字反斜杠,而转义单引号的方式为”;在LIKE表达式中,默认情况下根本没有转义符。

因此,如果要以可移植的方式进行LIKE逸出,则应覆盖默认(错误)行为,并使用该LIKE … ESCAPE

…构造指定自己的逸出字符。为了理智,我们将选择除该死的反斜杠以外的其他东西!

function like($s, $e) {

return str_replace(array($e, ‘_’, ‘%’), array($e.$e, $e.’_’, $e.’%’), $s);

}

$escapedname= mysql_real_escape_string(like($name, ‘=’));

$query= “… WHERE name LIKE ‘%$escapedname%’ ESCAPE ‘=’ AND …”;

或带有参数(例如在PDO中):

$q= $db->prepare(“… WHERE name LIKE ? ESCAPE ‘=’ AND …”);

$q->bindValue(1, ‘%’.like($name, ‘=’).’%’, PDO::PARAM_STR);

(如果您希望有更多的可移植性聚会时间,那么尝试考虑MS SQL

Server和Sybase也可能会很有趣,因为在[错误的情况下,该字符在LIKE语句中也很特殊,必须转义。argh。)

2020-05-17

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/149130.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 微服务架构-实现技术之具体实现工具与框架8:Spring Cloud Config原理与注意事项

    目录注:主要只做理论性的总结与分析,相关实战代码会在后面的博客中和github中逐步增加。一、配置中心的由来及选择(一)配置中心由来(二)配置中心要求具备的功能(三)配置中心基本流转图和支撑体系分析​(四)多种配置中心的选择与对比方案二、SpringCloudConfig概述及基本实现方法介绍三、SpringClo…

    2022年4月6日
    50
  • Hadoop的生态系统介绍

    Hadoop的生态系统介绍一.Hadoop生态系统架构二.生态系统介绍2.1HDFS(分布式文件存储系统)Hadoop分布式文件系统是Hadoop项目的两大核心之一,是针对谷歌文件系统(GoogleFileSystem,GFS)的开源实现。是Hadoop体系中数据存储管理的基础。它是一个高度容错的系统,能检测和应对硬件故障,用于在低成本的通用硬件上运行。HDFS简化了文件的一致性模型,通过流式数据访问…

    2022年5月19日
    51
  • Spring AOP中动态代理的两种实现方式及其过程_spring动态代理原理

    Spring AOP中动态代理的两种实现方式及其过程_spring动态代理原理什么是代理?指为一个目标对象提供一个代理对象,并由代理对象控制对目标对象的引用.使用代理对象,是为了在不修改目标对象的基础上,增强目标对象的业务逻辑.静态代理静态代理的特点是,为每一个业务增强都提供一个代理类,由代理类来创建代理对象.下面我们通过静态代理来实现对转账业务进行身份验证.(1)转账业务publicinterfaceIAccountService{…

    2022年8月11日
    5
  • 【WTM-多租户改造】「建议收藏」

    【WTM-多租户改造】「建议收藏」WTM-多租户改造

    2025年5月24日
    4
  • c语言debug和release什么区别_电源模式有何差别

    c语言debug和release什么区别_电源模式有何差别.NET中Debug模式与Release模式差别

    2022年4月22日
    99
  • cglib BeanCopier 使用

    cglib BeanCopier 使用cglib是一款比较底层的操作java字节码的框架。 下面通过拷贝bean对象来测试BeanCopier的特性: Java代码  public class OrderEntity {      private int id;      private String name;      // Getters and setters are o

    2025年9月13日
    10

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号