mysql语句如何插入含单引号或反斜杠的值详解
前言
本文主要给大家介绍了关于mysql语句插入含单引号或反斜杠值的相关内容,下面话不多说了,来一起看看详细的介绍吧
比如说有个表,它的结构是这个样子的
CREATETABLE`activity`( `id`int(11)NOTNULLAUTO_INCREMENTCOMMENT'ID', `title`varchar(255)NOTNULLCOMMENT'活动标题', PRIMARYKEY(`id`) )ENGINE=InnoDBDEFAULTCHARSET=utf8COMMENT='活动表';
比如说往里面插入记录,示例代码如下:
$servername="xxxxservername"; $port=3306; $username="xxxusername"; $password="xxxpwd"; $dbname="xxxxxxdb"; //创建连接 $conn=newmysqli($servername,$username,$password,$dbname,8306); //检测连接 if($conn->connect_error){ die("connectfailed:".$conn->connect_error); } $item['title']='happynewyear!'; $sql=sprintf("INSERTINTOactivity(title)VALUES('%s');",$item['title']); var_dump($sql); if($conn->query($sql)===TRUE){ echo"insertsuccess\n"; }else{ echo"insertfailed:".$conn->error; } $conn->close();
这一段代码执行OK,没啥问题。但是如果代码里面的title变成happyvalentine'sday!就会报如下错误,提示你有语法错误:
insertfailed:YouhaveanerrorinyourSQLsyntax;checkthemanualthatcorrespondstoyourMySQLserverversionfortherightsyntaxtousenear'sday!')'atline
因为INSERTINTOactivity(title)VALUES('happyvalentine'sday!');这个sql语句里面单引号不是成对的。
有时候会往数据库里面插入一些用户给的数据,很可能会出现上面这种情况,那么该如何避免呢?
要对sql里面的特殊字符进行转义。可以把$sql的那一行代码改成如下这样:
$sql=sprintf("INSERTINTOactivity(title)VALUES('%s');",mysqli_real_escape_string($conn,$item['title']));
整个sql字符串实际上是这样的:
INSERTINTOactivity(title)VALUES('happyvalentine\'sday!');"
有时候还会出现一种问题:json_encode之后,里面的中文被转成unicode码,插入到mysql里面发现\被吃掉了。
比如说中文这两个字的unicode码是\u4e2d\u6587,但是有时候插到数据库里反斜杠被吃掉了变成了u4e2du6587
看如下示例代码:
$item['title']=json_encode([ 'balbalbla'=>'中文' ]); $sql=sprintf("INSERTINTOactivity(title)VALUES('%s');",$item['title']);
整个sql字符串实际上是这样的:
INSERTINTOactivity(title)VALUES('{"balbalbla":"\u4e2d\u6587"}');
插入到数据库里面,title这个字段的值就变成了{"balbalbla":"u4e2du6587"}。
那是因为这里的\被当成转义符了,实际上要对unicode码的\再次转义,这样插入数据库的才是对的
$item['title']=json_encode([ 'balbalbla'=>'中文' ]); $sql=sprintf("INSERTINTOactivity(title)VALUES('%s');",mysqli_real_escape_string($conn,$item['title']));
整个sql字符串实际上是这样的:
INSERTINTOactivity(title)VALUES('{\"balbalbla\":\"\\u4e2d\\u6587\"}');
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对毛票票的支持。