Eğer SQL sorgusu bir dize eklemek isterseniz Genel olarak konuşursak, size SQL sorgusuna eklemeden önce hemen kaçmak gerekir.
Ben size kaçan hakkında endişelenmenize gerek yok, böylece PHP script başında tüm verilerinizi kaçmak istediğinizi varsayalım.
Kötü bir tasarım yöntemi, çünkü SQL sorguları için kaçan dize orada dahil edilmemelidir:
- What happens when you add the escaped string to an input element of an HTML form?
The original client's string will be modified.
- Bu zaten kaçtı verileri ile hazırlanan ifadeleri kullanmak için rahatsız edici ya da sorunlu bir yoldur.
Ben aşağıdaki kod kullanılması gerektiğini düşünüyorum:
function init_filter_input($method_array /* $_GET, $_POST, or whatever you wish */ )
{
filter_UTF8($method_array); // for a UTF8 encoded string
filter_HTML($method_array);
}
function filter_UTF8($mixed)
{
return is_array($mixed)
? array_map('filter_UTF8',$mixed)
: iconv('UTF-8','UTF-8//IGNORE',$mixed);
}
function filter_HTML($mixed)
{
return is_array($mixed)
? array_map('filter_HTML',$mixed)
: htmlspecialchars(trim($value),ENT_QUOTES);
}
Eğer SQL sorgusu bir dize eklemek istediğiniz zaman, hazır deyimleri, ya sprintf'i kullanmaya karar verebilir:
// sprintf example:
query('SELECT ... WHERE username="%s"', $unescaped_username);
function query($query_str, $params)
{
if (is_array($params))
{
$params = array_map('filter_SQL', $params);
$query_str = vsprintf($queryStr, $params);
}
else
$query_str = sprintf($query_str ,filter_SQL($params));
mysql_query($query_str);
}