Home >php教程 >php手册 >addslashes,mysql_real_escape_string和mysql_escape_string介绍

addslashes,mysql_real_escape_string和mysql_escape_string介绍

WBOY
WBOYOriginal
2016-05-25 16:47:471263browse

本文章来给大家简单介绍关于在php中addslashes() ,mysql_real_escape_string() 和mysql_escape_string()的一些用法与区别,有举的朋友可参考.

以前还真没有关注过这面的事情.自己在写的时候都是用了一个很简单的函数addslashes() 函数在指定的预定义字符前添加反斜杠.

这些预定义字符是:

•单引号 (')

•双引号 (")

•反斜杠 ()

•NULL

实例代码如下:

<?php  
function as_array(&$arr_r)  
{  
    foreach ($arr_r as &$val) is_array($val) ? as_array($val):$val=addslashes($val);  
    unset($val);  
} 
as_array($_POST);  
?>

虽然国内很多PHP程序员仍在依靠addslashes防止SQL注入,还是建议大家加强中文防止SQL注入的检查.addslashes的问题在 于黑客 可以用0xbf27来代替单引号,而addslashes只是将0xbf27修改为0xbf5c27,成为一个有效的多字节字符,其中的0xbf5c仍会 被看作是单引号,所以addslashes无法成功拦截.

当然addslashes也不是毫无用处,它是用于单字节字符串的处理,多字节字符还是用mysql_real_escape_string吧.另外对于php手册中get_magic_quotes_gpc的举例:

实例代码如下:

if (!get_magic_quotes_gpc()) { 
    $lastname = addslashes($_POST[&#39;lastname&#39;]); 
} else { 
    $lastname = $_POST[&#39;lastname&#39;]; 
}

最好对magic_quotes_gpc已经开放的情况下,还是对$_POST['lastname']进行检查一下.

再说下mysql_real_escape_string和mysql_escape_string这2个函数的区别:

mysql_real_escape_string 必须在(PHP 4 >= 4.3.0, PHP 5)的情况下才能使用. mysql_escape_string (PHP 4 >= 4.0.3, PHP 5, 注意:在PHP5.3中已经弃用这种方法,不推荐使用),

<?php 
// 说明:用 array_map() 调用 mysql_real_escape_string 清理数组 
function mysqlClean($data) 
{ 
    return (is_array($data))?array_map(&#39;mysqlClean&#39;, $data):mysql_real_escape_string($data); 
} 
?>

两者的区别是:mysql_real_escape_string 考虑到连接的当前字符集,而mysql_escape_string 不考虑.

总结一下:

实例代码如下:

<?php 
 function escape($str){ 
    if(function_exists(&#39;mysql_escape_string&#39;)){ 
        return mysql_escape_string($str); 
    }elseif( function_exists(...real_escape...)){ 
        //real_escape 
    }else{ 
        if(MAGIC_QUOTER ....判断){ 
            return $str 
        }else{ 
            return addslashes($str); 
        } 
    } 
} 
?>


Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn