共計 2082 個字符,預計需要花費 6 分鐘才能閱讀完成。
自動寫代碼機器人,免費開通
這篇文章給大家分享的是有關 mysql 語句怎樣插入含單引號或反斜杠的值的內容。丸趣 TV 小編覺得挺實用的,因此分享給大家做個參考,一起跟隨丸趣 TV 小編過來看看吧。
前言
比如說有個表,它的結構是這個樣子的
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\}
感謝各位的閱讀!關于“mysql 語句怎樣插入含單引號或反斜杠的值”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
向 AI 問一下細節