PHP müşterilerinden gelen değişkenleri filtre () mysql_real_escape_string daha iyi bir yolu var mı?

5 Cevap php

Bu soru burada zaten bir cevabı var:

5 Cevap

Ayrıca array_map kullanabilirsiniz

$_POST = array_map('mysql_real_escape_string',$_POST);

Bu işi yapmak için daha iyi bir yolu var mı?

Kesinlikle: parameterised queries.

Onlar PHP biraz söz konum, ve onlar gerektiren bu yana ne yazık ki yerine ait, mysqli (veya özelliği sağlar bazı diğer veri erişim katmanı ve veritabanı bağımsızlığı gibi belki diğerleri) geçmek için Eski mysql_ fonksiyonları bazı yeniden yazımı olması gerekir. Ama SQL dize literal uygulamanızın dışarı kaçan ve ait veri erişim katmanı koyarak alarak büyük bir gelişme var.

gibi, foreach?

$names = array('foo', 'bar', 'baz');
$inputs = array();
foreach ($names as $name) {
   $inputs[$name] = mysql_real_escape_string($_POST[$name]);
}

Hayır, bu en iyi yoldur. Yanıtlanıyor gibi this old question, her zaman dil / sistem sizin için uygun olan her türlü araçları kullanmak gerekir.

Ancak, sorun hala sıkıcı olma konusunda kalır. Ben bir döngü öneririm. Lütfen değişkenler olduğu varsayıldığında $_POST:

$vars = array("foo", "bar", "baz"); // names of variables
foreach ($vars as $var) {
    // tricky $$ usage will create the variables
    // $foo, $bar, etc., with the escaped values.
    ${$var} = mysql_real_escape_string($_POST[$var]);
    // you could also store an array of inputs, like $inputs[$var] = ...;
}

Ben DBO yoluyla hazırlanmış sorguları tercih ederim .. ama burada bir seçenek

function recursive_escape($arrayin) {
    if (is_array($arrayin)){
        foreach($arrayin as $key=>$value){
            if (is_array($value)){
                foreach($value as $key2=>$value2){
                    $escapedArray[$key][$key2] = mysql_real_escape_string($value2);
                }
            } else {
                $escapedArray[$key] = mysql_real_escape_string($value);
            }
        }
    } else {
        //nothing done
        $escapedArray = $arrayin;
    }
    if(!isset($escapedArray)) {
        $escapedArray = Array ( );
    }
    return $escapedArray;
}