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/
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
Atlassian系列产品及插件激活方法[JIRA8.19.0+]
聊聊golang的defer的使用
用CSS实现图片等比例缩放
JavaScript回调函数callback用法解析
Python进程间通信用法实例
基于Python列表解析(列表推导式)
swiper在vue项目中loop循环轮播失效的解决方法
pandas计算最大连续间隔的方法
![](https://img.aspxhome.com/file/2023/7/104397_0s.jpg)
设置密码保护的SqlServer数据库备份文件与恢复文件的方法
PHP面向对象继承用法详解(优化与减少代码重复)
Golang并发之RWMutex的用法详解
![](https://img.aspxhome.com/file/2023/5/127385_0s.png)
php实现mysql同步的实现方法
python 爬取华为应用市场评论
![](https://img.aspxhome.com/file/2023/2/88972_0s.png)
Python如何发送与接收大型数组
python如何编写win程序
![](https://img.aspxhome.com/file/2023/6/76856_0s.png)
Mootools 1.2教程(15)——滚动条(Slider)
ASP格式化日期的函数(输出13种样式)
探讨链接打开方式
![](https://img.aspxhome.com/file/UploadPic/20093/16/1-401x230-94s.jpg)