在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
前言 本文主要给大家介绍了关于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!就会报如下错误,提示你有语法错误:
因为 有时候会往数据库里面插入一些用户给的数据,很可能会出现上面这种情况,那么该如何避免呢? 要对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这个字段的值就变成了 那是因为这里的\被当成转义符了,实际上要对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\"}'); 总结 以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对极客世界的支持。 |
请发表评论