因为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\"}');
总结
Copyright © 2019- huatuo6.cn 版权所有 赣ICP备2024042791号-9
违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务