1、Phpwind中有一个db_cv的函数,里面代码如下function db_cv($array){
if(is_array($array)){
foreach($array as $key=>$value){
$array[$key]=str_replace(array("\\","'"),array("\\\\","\'"),$value);
}
}
return $array;
}很多情况下,是这样用的:
while($rt=db_cv($db->fetch_array($query))){看了一下,这个函数不仅做了单引号的替换,还做了一个把双斜线替换成4斜线的替换,模糊记得好像说是啥安全问题,但具体记不住了。想请教一下,这样具体有啥用处?2、addslash()在Update语句中是不是要用啊?在Insert语句中用addslash()功能很正常,但是在update语句中使用,好像就出问题了,斜线都被存入到了数据库中。请问在UPDATE中是否不需要用addslash()?如果不用是否会出安全问题?
if(is_array($array)){
foreach($array as $key=>$value){
$array[$key]=str_replace(array("\\","'"),array("\\\\","\'"),$value);
}
}
return $array;
}很多情况下,是这样用的:
while($rt=db_cv($db->fetch_array($query))){看了一下,这个函数不仅做了单引号的替换,还做了一个把双斜线替换成4斜线的替换,模糊记得好像说是啥安全问题,但具体记不住了。想请教一下,这样具体有啥用处?2、addslash()在Update语句中是不是要用啊?在Insert语句中用addslash()功能很正常,但是在update语句中使用,好像就出问题了,斜线都被存入到了数据库中。请问在UPDATE中是否不需要用addslash()?如果不用是否会出安全问题?
discuz
$array[$key]=str_replace(array("\\","'"),array("\\\\","\'"),$value);
第一次遇到,不知道
第二个问题:所有入库前均可进行变量转换,但最好判断一下是否打开魔术引用!如果没有开启就用addslash
出库同理
在MYSQL中 ,如果 你不转义/的话,就会出现不可以预料的结果
/*DDL Information For - test.a1*/
---------------------------------Table Create Table
------ -----------------------------------------
a1 CREATE TABLE `a1` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`str1` char(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 insert into a1(str1) values
('http://www.csdn.net'),
('c:\lamp.txt'),
('c:\\lamp.txt'),
('c:\\\\lamp.txt');select * from a1;
query result(4 records)
id str1
1 http://www.csdn.net
2 c:lamp.txt
3 c:\lamp.txt
4 c:\\lamp.txt
看了下手册,就是将
$value中的\\ 替换为\\\\
"'"替换为"\'"相当于加上魔术引用!
PHP5以上是自动加的,但也可以做一个判断!判断是否开启,如没开启,就用addslash(或楼主的函数)!