标签:客户 sla strip sql错误 使用 用户名 案例 数据库 escape
最近在看一部php的基础视频教程,在做案例的时,当通过用户名查询用户信息的时候,先使用了转义函数对客户提交的内容进行过滤之后再交给sql语句进行后续的操作。虽然能看到转义函数本身的作用,但是仍然有一些疑惑。
疑惑一:当转义数据后,数据中会增加一些反斜杠,为了能查找出对应的数据,那么原来存在数据库中的数据是不是也已经被保存成含有反斜杠的了?
疑惑二:转义数据后再向数据库中插入数据,保存在数据库中的数据是否会含有过滤后的反斜杠?
带着这些疑问对用户提交的表单进行测试。
echo get_magic_quotes_gpc(); // 获取当前 magic_quotes_gpc的配置选项设置,如果开启了就会返回1,否则返回0
$title = $_POST[‘title‘];
$sql = insert into news(`title`) values(‘". $title ."‘);
如果不适用mysql_real_escape_string()转义函数,当接收的数据中包含单引号时就会引起sql错误。
$title = mysql_real_escape_string($_POST[‘title‘]);
转义过后再进行插入数据就不会出现上面的问题,而且插入到数据库中的数据和输入时的一样,不会带有转义时增加的反斜杠。
当查询数据时,也是按照输入时的内容与数据库进行比较,也能查询出相应的结果。
由此推论,mysql_real_escape_string()转义函数只在sql语句执行的过程中起到保护作用,并不会对结果产生影响。
将过滤函数贴出来。
1 function check_input($value) 2 { 3 // 去除斜杠 4 if (get_magic_quotes_gpc()) 5 { 6 $value = stripslashes($value); 7 } 8 // 如果不是数字则加引号 9 if (!is_numeric($value)) 10 { 11 $value = mysql_real_escape_string($value); 12 } 13 return $value; 14 }
以上是自己的理解,与大家分享,如果有误还请大家批评指正。
标签:客户 sla strip sql错误 使用 用户名 案例 数据库 escape
原文地址:http://www.cnblogs.com/iverson-3/p/6920438.html