讨论magic_quotes_gpc、mysql_real_escape_string、addslashes的区别及用法
本篇文章,主要先重点说明 magic_quotes_gpc、mysql_real_escape_string、addslashes 三个函数方法的含义、用法,并举例说明。然后阐述下三者间的区别、关系。
一、magic_quotes_gpc含义介绍
这个函数,只有在页面传递 $_GET,$_POST,$_COOKIE 时才会发生作用,主动进行调用,在web客户端执行。对传递的字符串是否进行转义处理。
用法: magic_quotes_gpc=on/off; (当为on时,主动对字符串进行转义处理,即添加转义斜线=单引号转换为\’,若为off,则不进行转义处理)一般默认为off。
举例:
if(!magic_quotes_gpc()){
$name = addslashes($_POST['name']);
}else{
$name = $_POST['name'];
}//这个是对 magic_quotes_gpc 定义的判断,若为off,就要通过 magic_quotes_gpc 进行转义处理,否则不做处理。
二、mysql_real_escape_string含义介绍
这个函数,作用和 magic_quotes_gpc 差不多,同样是对字符串进行转义处理,是在入数据库前的处理,特别是对于多字符节处理时,安全性高于下面要说的addslashes。可有效防止对数据库的攻击。
用法: mysql_real_escape_string(string,connection) ,string为转义字符串,connection为数据库连接字符串–可选。
举例:
<?php
function check_input($value)
{
// 若设置为on,则需要反转义
if (get_magic_quotes_gpc())
{
$value = stripslashes($value);
}
// 判断是否为纯数字
if (!is_numeric($value))
{
$value = "’" . mysql_real_escape_string($value) . "’";
}
return $value;
}
$con = mysql_connect("localhost", "unvs", "123456");
if (!$con)
{
die(‘Could not connect: ‘ . mysql_error());
}
// 检查字符串,存入数据库
$user = check_input($_POST['user']);
$pwd = check_input($_POST['pwd']);
$sql = "SELECT * FROM users WHERE
user=$user AND password=$pwd";
mysql_query($sql);
mysql_close($con);
?>
三、addslashes含义介绍
在第一个举例中,我们用到了 addslashes 函数,作用同样为对GET、POST、COOKIE过来的字符串进行转义处理,通常与 magic_quotes_gpc 结合使用,。
用法:此函数是对字符串进行强行转义,另同magic_quotes_gpc。
举例:见第一点。
下面讲述下三者之间的区别、关系:
1、addslashes 与 mysql_real_escape_string,同样的作用是经过转义后,可直接插入数据库, 国内很多PHP coder是使用addslashes函数防止SQL注入,但是其实,最好的还是建议大家使用后者来转义数据。
举例说明:addslashes的问题
本博文章基本上属于原创或收集整理,都是心血结晶。
欢迎转载分享,转载请注明出处,谢谢!
本文地址:讨论magic_quotes_gpc、mysql_real_escape_string、addslashes的区别及用法
3 条评论
很受教~~学的比我透彻 我都荒废了
碰到mysql_real_escape_string在PHP6里不能用,用了直接出错,函数被取消了
你的验证码还真不好认