(转)addslashes与mysql_real_escape_string的差别

(转)addslashes与mysql_real_escape_string的区别

我们为了更深层次的探究这两个函数的不同..还是去看一看PHP的源码吧..

这是PHP的addslashes函数..

PHP_FUNCTION(addslashes) 



    zval **str; 

    if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &str) == FAILURE) { 

        WRONG_PARAM_COUNT; 

    } 

    convert_to_string_ex(str); 

    if (Z_STRLEN_PP(str) == 0) { 

        RETURN_EMPTY_STRING(); 

    } 

    RETURN_STRING(php_addslashes(Z_STRVAL_PP(str), 

                                 Z_STRLEN_PP(str),  

                                 &Z_STRLEN_P(return_value), 0  

                                 TSRMLS_CC), 0); 

}

很显然.它调用了php_addslashes.我们继续看这个函数

PHPAPI char *php_addslashes(char *str, int length, int *new_length, int should_free TSRMLS_DC) 



    return php_addslashes_ex(str, length, new_length, should_free, 0 TSRMLS_CC); 

}

结果又是是在调用php_addslashes_ex 我们就像在剥洋葱一样..一步一步的接近真理..

PHPAPI char *php_addslashes_ex(char *str, int length, int *new_length, int should_free, int ignore_sybase TSRMLS_DC) 



    /* maximum string length, worst case situation */

    char *new_str; 

    char *source, *target; 

    char *end; 

    int local_new_length; 

             

    if (!new_length) { 

        new_length = &local_new_length; 

    } 

    if (!str) { 

        *new_length = 0; 

        return str; 

    } 

    new_str = (char *) safe_emalloc(2, (length ? length : (length = strlen(str))), 1); 

    source = str; 

    end = source + length; 

    target = new_str; 

     

    if (!ignore_sybase && PG(magic_quotes_sybase)) { 

        while (source < end) { 

            switch (*source) { 

                case ‘\0’: 

                    *target++ = ‘\\’; 

                    *target++ = ‘0’; 

                    break; 

                case ‘\”: 

        

(转)addslashes与mysql_real_escape_string的差别

相关文章:

你感兴趣的文章:

标签云: