Bir diziye bir işlevi uygulamak için kolay yolu

5 Cevap php

I array_walk() ve array_map() farkındayım. Ancak (eski bir proje) bu yüzden gibi eski kullanırken başarısız

array_walk($_POST, 'mysql_real_escape_string');

Warning: mysql_real_escape_string() expects parameter 2 to be resource, string given.

Yani bu biraz daha çirkin sürümü ile gitti

foreach($_POST as $key => $value) {
    $_POST[$key] = mysql_real_escape_string($value);
}

Peki neden ilk yolu işe yaramadı? Bir işlevin bir dizinin değerlerini haritasına en iyi yolu nedir?

5 Cevap

Mysql_real_escape_string iki parametre, dize hem verilmektedir çünkü bulunuyor.

http://php.net/manual/en/function.mysql-real-escape-string.php

http://www.phpbuilder.com/manual/en/function.array-map.php:

array_map() returns an array containing all the elements of arr1 after applying the callback function to each one. The number of parameters that the callback function accepts should match the number of arrays passed to the array_map()

Yapabileceğin

function myescape($val)
{
    return mysql_real_escape_string($val);
}

Sonra ...

array_walk($_POST, 'myescape');

Önce bir mysql bağlantı yaptık sürece mysql_real_escape_string() çalışmayacaktır. O kadar cool nedeni tablo türünü uygun bir şekilde karakterleri kaçış olacaktır. İkinci [isteğe bağlı] argüman mysql bağlantısı için bir referanstır.

$_POST zaman key->value olarak ayarlanır. Yani, array_walk çağırır mysql_real_escape_string(value, key). İkinci argüman bir referans değildir dikkat edin.

Bu işe yaramazsa nedeni budur. Yukarıda belirtilen çeşitli çözüm vardır.

http://php.net/manual/en/function.array-walk.php array_walk 2 argüman, değer ve anahtar ile işlevini çağırır söylüyor. Sen mysql_real_escape_string sarmak için yeni bir fonksiyon yazmak gerekir. Gibi bir şey:

function wrapper($val, $key){
    return mysql_real_escape_string($val);
}

Ve sonra:

array_walk($_POST, 'wrapper');

Maalesef benim PHP doğru değil, ama genel bir fikir yakalayacağız düşünüyorsanız.

Ben dışarı çalışmıyor olabilir nedenlerden dolayı bana hataları neden olarak ben kabul cevabı kullanırken sorun vardı. Yani herkes array_walk ile sorun yaşıyorsanız veya array_map için ben bu işe bulundu.

foreach($_POST as $pk => $pv) $_POST[$pk] = mysql_real_escape_string($pv);