在php的多维数组中使用mysql_real_escape_string



我正在编写一个大脚本,它将生成一些字符串数组多维数组我想使用 mysql_real_escape_string 用于所有数组/字符串为此,我尝试了下面的代码

function check($data) {
    if(!is_array($data)) {
        return mysql_real_escape_string($data);
    } else if (is_array($data)) {
       $newData = array();
       foreach($data as $dataKey => $dataValue){
             if(!is_array($dataValue)){
                 $key = mysql_real_escape_string($dataKey);
                 $value = mysql_real_escape_string($dataValue);
                 $newData[$key] = $value;
             }
        }
        return $newData;
     }  
}

如果我像这样使用check('saveme');,返回值

如果我传递一个数组,它返回当前值[check(array('a','b','c',1,2,3))]

如果我传递多维数组,我得到[check(array(array('a',array('a','b','c',1,2,3),'c',1,2,3),'b',array('a','b','c',1,2,3),1,2,3))]

我想使用mysql_real_escape_string数组键。

您可以使用array_walk_recursive函数,抛出数组的所有叶子,并转义值:

array_walk_recursive($array, function(&$leaf) {
    if (is_string($leaf))
       $leaf = mysql_real_escape_string($leaf);
});

另外,最好遵循数据一致性规则,不要使用!is_array(),而是使用is_string(),因为mysql_real_escape_string接受string参数,而不是!string

不幸的是,array_walk_recursive被设计成不能编辑keys。如果需要编辑键,可能需要编写自己的递归函数。我不想复制答案,你可以在这里找到

你可以使用这个函数:

(MyStringEscapeFunc()是您的自定义转义函数)

function escape_recursive($arr){
    if(is_array($arr)){
        $temp_arr = array();
        foreach ($arr as $key=>$value){
                $temp_arr[MyStringEscapeFunc($key)] = escape_recursive($value);
        }
        return $temp_arr;
    }else{
        return MyStringEscapeFunc($arr);
    }
}

示例结果:

//Before :
Array (
[0] => Array ( 
          [0] => foo'bar
          [1] => bar'baz
        ) 
[1] => foob'ar
[2] => Array ( [foo'baz] => baz'foo ) 
) 

//After : 
Array ( 
[0] => Array (
        [0] => foo'bar
        [1] => bar'baz
       )
[1] => foob'ar 
[2] => Array ( [foo'baz] => baz'foo )
)

相关内容

  • 没有找到相关文章

最新更新