往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;
结果(无需手动转义):