mysql语句如何插入含单引号或反斜杠的值详解
16lz
2021-12-24
前言
本文主要给大家介绍了关于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();
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']));
INSERT INTO activity (title) VALUES ( 'happy valentine\'s day!');"
比如说中文这两个字的unicode码是\u4e2d\u6587,但是有时候插到数据库里反斜杠被吃掉了变成了u4e2du6587
看如下示例代码:
$item['title'] = json_encode([ 'balbalbla' => '中文']);$sql = sprintf("INSERT INTO activity (title) VALUES ( '%s');", $item['title']);
INSERT INTO activity (title) VALUES ( '{"balbalbla":"\u4e2d\u6587"}');
那是因为这里的\被当成转义符了,实际上要对unicode码的\再次转义,这样插入数据库的才是对的
$item['title'] = json_encode([ 'balbalbla' => '中文']);$sql = sprintf("INSERT INTO activity (title) VALUES ( '%s');", mysqli_real_escape_string($conn, $item['title']));
INSERT INTO activity (title) VALUES ( '{\"balbalbla\":\"\\u4e2d\\u6587\"}');
更多相关文章
- Android(安卓)-- Android(安卓)JUint 与 Sqlite
- android 当系统存在多个Launcher时,如何设置开机自动进入默认的La
- Android(安卓)SQLiteDatabase的使用
- android 通话记录次数
- Android(安卓)SQLiteDatabase的使用
- android实现关键字搜索功能
- 我的android 第14天 - 使用SQLiteDatabase操作SQLite数据库
- Android(安卓)编码规范
- android contentProvider例子