讨论magic_quotes_gpc、mysql_real_escape_string、addslashes的区别及用法

作者: unvs 分类: PHP 发布时间: 2012-03-17 20:36 ė16,573 views 63条评论

本篇文章,主要先重点说明 magic_quotes_gpcmysql_real_escape_stringaddslashes 三个函数方法的含义、用法,并举例说明。然后阐述下三者间的区别、关系。
一、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 条评论

  1. xmwusx 2012 年 4 月 10 日 上午 9:44 回复

    很受教~~学的比我透彻 我都荒废了

    cyheng 于 2012-04-10 17:57:21 回复

    呵,深入了解了下,共同学习。

  2. 晴枫 2012 年 5 月 1 日 下午 3:25 回复

    碰到mysql_real_escape_string在PHP6里不能用,用了直接出错,函数被取消了

    cyheng 于 2012-05-01 18:17:14 回复

    PHP6还没怎么用,学习了!

  3. 晴枫 2012 年 5 月 1 日 下午 3:26 回复

    你的验证码还真不好认

    cyheng 于 2012-05-01 18:17:52 回复

    呵呵,是有点,默认的没换过!

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Ɣ回顶部