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

作者:nemo 时间:2024-01-13 03:30:03 

前言

本文主要给大家介绍了关于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":"\u4e2d\u6587"}');

插入到数据库里面,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\"}');

来源:https://fbd.intelleeegooo.cc/mysql-insert-single-quotation-backslash/

标签:mysql语句,单引号,反斜杠
0
投稿

猜你喜欢

  • Atlassian系列产品及插件激活方法[JIRA8.19.0+]

    2023-01-29 19:30:16
  • 聊聊golang的defer的使用

    2023-07-21 13:15:02
  • 用CSS实现图片等比例缩放

    2008-01-18 21:10:00
  • JavaScript回调函数callback用法解析

    2024-04-22 22:12:48
  • Python进程间通信用法实例

    2023-02-13 02:53:18
  • 基于Python列表解析(列表推导式)

    2021-11-14 16:31:36
  • swiper在vue项目中loop循环轮播失效的解决方法

    2024-05-03 15:10:24
  • pandas计算最大连续间隔的方法

    2022-05-23 12:05:21
  • 设置密码保护的SqlServer数据库备份文件与恢复文件的方法

    2024-01-15 10:19:55
  • PHP面向对象继承用法详解(优化与减少代码重复)

    2023-11-21 10:16:48
  • Golang并发之RWMutex的用法详解

    2024-05-09 14:52:35
  • php实现mysql同步的实现方法

    2023-11-24 13:58:56
  • python 爬取华为应用市场评论

    2023-08-31 23:18:32
  • Python如何发送与接收大型数组

    2022-07-26 06:54:54
  • python如何编写win程序

    2022-12-09 11:48:38
  • Mootools 1.2教程(15)——滚动条(Slider)

    2008-12-09 17:35:00
  • ASP格式化日期的函数(输出13种样式)

    2011-07-12 20:22:00
  • 探讨链接打开方式

    2009-03-16 16:55:00
  • Go语言下载网络图片或文件的方法示例

    2024-02-13 17:20:52
  • SQL Server数据库的高性能优化经验总结

    2024-01-18 17:04:55
  • asp之家 网络编程 m.aspxhome.com