前言

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

更多相关文章

  1. Android(安卓)-- Android(安卓)JUint 与 Sqlite
  2. android 当系统存在多个Launcher时,如何设置开机自动进入默认的La
  3. Android(安卓)SQLiteDatabase的使用
  4. android 通话记录次数
  5. Android(安卓)SQLiteDatabase的使用
  6. android实现关键字搜索功能
  7. 我的android 第14天 - 使用SQLiteDatabase操作SQLite数据库
  8. Android(安卓)编码规范
  9. android contentProvider例子

随机推荐

  1. 如何在HTML主体上设置网格ExtJS,高度为100
  2. 2003生成 注释web页问题,第二级的html 内
  3. 制作一个可滚动的div,它不会滚动身体的其
  4. 使用换行符将textarea的文本复制到div中
  5. js去除html标记的测试问题。很多分!
  6. 关于INPUT的autocomplete="off" 属性(浏览
  7. html5-开发起步使用工具
  8. 使用materialize css在不同页面上显示不
  9. 从数据库中读出来的是html标签,如何转换
  10. HTML表单学习1——表单基础