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

70次阅读
没有评论

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

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-12-04发表,共计2082字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)