mysql语句插入含单引号或者反斜杠的值

栏目: 数据库 · 发布时间: 6年前

内容简介:比如说有个表,它的结构是这个样子的比如说往里面插入记录,示例代码如下:这一段代码执行OK,没啥问题。但是如果代码里面的

比如说有个表,它的结构是这个样子的

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\"}');

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Types and Programming Languages

Types and Programming Languages

Benjamin C. Pierce / The MIT Press / 2002-2-1 / USD 95.00

A type system is a syntactic method for automatically checking the absence of certain erroneous behaviors by classifying program phrases according to the kinds of values they compute. The study of typ......一起来看看 《Types and Programming Languages》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码