这篇文章给大家分享的是有关Mysql语句怎样插入含单引号或反斜杠的值的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。前言比如说有个表,它的结构是这个样子的CREATE T
这篇文章给大家分享的是有关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\"}');
感谢各位的阅读!关于“mysql语句怎样插入含单引号或反斜杠的值”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
--结束END--
本文标题: mysql语句怎样插入含单引号或反斜杠的值
本文链接: https://lsjlt.com/news/55011.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-10-23
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0