PHP在mysql中的数据转义问题
往mysql数据库插入以及更新,删除数据时,除了要进行html实体转换(htmlentities()函数),防止xss注入,还要对字符串类型的字段进行转义,特别是有中文字符时,以免引起一些不必要的错误,以及防止sql注入。下面进行说明:
1. 通常需要转义的字符有:
单引号("), 双引号("),反斜线(),以及NULL字符
2. php5.3版本之前,magic_quotes_gpc默认是开启的,会自动在$_GET,$_POST上的数据执行addslashes操作, 但5.3版本之后magic_quotes_gpc被废弃,所以需要手动在存入数据库之前进行addslashes操作,但是读取数据时,不用手动进行反转移即(stripslashes操作),因为addslashes()并未将反斜杠一起写入数据库,只是帮助mysql完成了sql语句的执行。
假设在PHP7版本下,有一张客户反馈表,表结构如下:
`CREATE TABLE `feedback` (
`fid` int(11) unsigned NOT NULL AUTO_INCREMENT,
`uid` int(11) NOT NULL,
`content` varchar(1024) NOT NULL DEFAULT "",
PRIMARY KEY (`fid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;`
下面有一条数据,其中uid为111, content为test
1.直接插入转义字符
sql语句:insert into feedback (uid, content) values(111, "test");
结果(报错):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 ""test")" at line 1
2.在插入之前对content字段进行转义
sql语句:insert into feedback (uid, content) values(111, "test\");
结果(成功):
3.从数据库取出这一条数据
sql语句:select * from feedback;
结果(无需手动转义):
声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。
- 上一篇:没有了
- 下一篇: PHP生成微信二维码