共计 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 问一下细节