一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數據庫技術|

服務器之家 - 數據庫 - Mysql - mysql語句如何插入含單引號或反斜杠的值詳解

mysql語句如何插入含單引號或反斜杠的值詳解

2019-06-05 09:57nemo服務器之家 Mysql

這篇文章主要給大家介紹了關于mysql語句如何插入含單引號或反斜杠的值的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧

前言

本文主要給大家介紹了關于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\"}');

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對服務器之家的支持。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 亚洲高清在线精品一区 | 国产午夜精品福利久久 | 九九成人免费视频 | 四虎私人影院 | 干b视频在线观看 | 色综合网天天综合色中文男男 | 春色视频网站 | 麻豆天美精东果冻传媒在线 | 国产色站| 被老头操| 女同videos双性人 | 丝袜捆绑调教视频免费区 | 亚洲欧美成人综合在线 | 四虎影视黄色 | 亚洲女bbwxxxx另类 | 天堂a视频 | 手机看片福利 | 国产精品66福利在线观看 | 91tm视频 | 欧美专区在线观看 | 国产精品国产国产aⅴ | jazz欧美人免费xxxxxx | 亚洲爱视频 | 国内精品久久久久久久久久久久 | 亚洲成年人免费网站 | 亚洲一区二区三区深夜天堂 | 香蕉久草在线 | 精品卡1卡2卡三卡免费网站 | 亚洲国产99| 美女脱了内裤打开腿让人羞羞软件 | 精品在线看 | 色老板视频 | 久久精品国产亚洲AV麻豆欧美玲 | 91短视频在线播放 | 99久久免费看精品国产一区 | 国产亚洲福利精品一区二区 | 忘忧草在线社区WWW日本-韩国 | 日本在线小视频 | 日本一区二区三区久久精品 | 色噜噜 男人的天堂在线观看 | 啊哈用力cao我 |