1. 程式人生 > 資料庫 >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');",$item['title']));

整個sql字串實際上是這樣的:

INSERT INTO activity (title) VALUES ( '{\"balbalbla\":\"\\u4e2d\\u6587\"}');

總結

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