• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    mysql语句如何插入含单引号或反斜杠的值详解

    前言

    本文主要给大家介绍了关于mysql语句插入含单引号或反斜杠值的相关内容,下面话不多说了,来一起看看详细的介绍吧

    比如说有个表,它的结构是这个样子的

    CREATE TABLE `activity` (
     `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',
     `title` varchar(255) NOT NULL COMMENT '活动标题',
     PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='活动表';

    比如说往里面插入记录,示例代码如下:

    $servername = "xxxxservername";
    $port = 3306;
    $username = "xxxusername";
    $password = "xxxpwd";
    $dbname = "xxxxxxdb";
    
    // 创建连接
    $conn = new mysqli($servername, $username, $password, $dbname, 8306);
    
    // 检测连接
    if ($conn->connect_error) {
     die("connect failed: " . $conn->connect_error);
    }
    
    $item['title'] = 'happy new year!';
    $sql = sprintf("INSERT INTO activity (title) VALUES ( '%s');", $item['title']);
    var_dump($sql);
    if ($conn->query($sql) === TRUE) {
    	echo "insert success\n";
    } else {
     echo "insert failed:" . $conn->error;
    }
    
    $conn->close(); 

    这一段代码执行OK,没啥问题。但是如果代码里面的title变成happy valentine's day!就会报如下错误,提示你有语法错误:

    insert failed:You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 's day!')' at line

    因为INSERT INTO activity (title) VALUES ( 'happy valentine's day!');这个sql语句里面单引号不是成对的。

    有时候会往数据库里面插入一些用户给的数据,很可能会出现上面这种情况,那么该如何避免呢?

    要对sql里面的特殊字符进行转义。可以把$sql的那一行代码改成如下这样:

    $sql = sprintf("INSERT INTO activity (title) VALUES ( '%s');", mysqli_real_escape_string($conn, $item['title']));

    整个sql字符串实际上是这样的:

    INSERT INTO activity (title) VALUES ( 'happy valentine\'s day!');"

    有时候还会出现一种问题: json_encode之后,里面的中文被转成unicode码,插入到mysql里面发现\被吃掉了。

    比如说中文这两个字的unicode码是\u4e2d\u6587,但是有时候插到数据库里反斜杠被吃掉了变成了u4e2du6587

    看如下示例代码:

    $item['title'] = json_encode([
      'balbalbla' => '中文'
    ]);
    $sql = sprintf("INSERT INTO activity (title) VALUES ( '%s');", $item['title']);

    整个sql字符串实际上是这样的:

    INSERT INTO activity (title) VALUES ( '{"balbalbla":"u4e2du6587"}');

    插入到数据库里面,title这个字段的值就变成了{"balbalbla":"u4e2du6587"}

    那是因为这里的\被当成转义符了,实际上要对unicode码的\再次转义,这样插入数据库的才是对的

    $item['title'] = json_encode([
      'balbalbla' => '中文'
    ]);
    $sql = sprintf("INSERT INTO activity (title) VALUES ( '%s');", mysqli_real_escape_string($conn, $item['title']));

    整个sql字符串实际上是这样的:

    INSERT INTO activity (title) VALUES ( '{\"balbalbla\":\"\\u4e2d\\u6587\"}');

    总结

    以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

    您可能感兴趣的文章:
    • PostgreSQL 中的单引号与双引号用法说明
    • 解决python 执行sql语句时所传参数含有单引号的问题
    • 使用NotePad++录制宏功能如何快速将sql搜索条件加上前后单引号
    • 关于Mysql查询带单引号及插入带单引号字符串问题
    • sql语句中单引号,双引号的处理方法
    • SQL中写入包含有英文单引号“ '''' ”失败问题深入详解
    上一篇:Windows下mysql 8.0.12 安装详细教程
    下一篇:MySQL InnoDB存储引擎的深入探秘
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    mysql语句如何插入含单引号或反斜杠的值详解 mysql,语句,如何,插入,含单,