Pull to refresh

PHP'шные фишечки

Reading time 2 min
Views 1.3K
Хочу рассказать вам о некоторых приемах, которыми я пользуюсь во время разработки сайтов. Возможно, они окажутся для вас полезными.

Заполнители в SQL-запросах


Удивительно, но в PHP-расширении mysql не реализованы заполнители, которые в шаблоне SQL-запроса стоят на месте необработанных данных. Значения, переданные заполнителям, автоматически обрабатываются mysql_real_escape_string(), что избавляет нас от опасности SQL-инъекции.
Пример использования этого механизма:

$name = "O'Reilly";
mysql_exec("SELECT * FROM people WHERE name = ?", $name);


Без него у нас получился бы такой код:

$name = "O'Reilly";
$name = mysql_real_escape_string($name);
mysql_query("SELECT * FROM people WHERE name = '$name'");


Преимущество первого метода на лицо.
А теперь сам код:

function mysql_exec($sql) {

$args = func_get_args();
$args = array_map("mysql_real_escape_string", $args); // Применяем mysql_real_escape_string ко всем аргументам
$sql = str_replace("?", "'%s'", $sql); // Подготавливаем шаблон для передачи его в sprintf
$args[0] = $sql;
$sql = call_user_func_array("sprintf", $args);
return mysql_query($sql);

}


unregister_globals


Бывает, что register_globals включена, и изменить это невозможно, в этом случае можно прибегнуть к хитрости:

function unregister_globals() {

// Нам нечего делать, если register_globals = off
if (!ini_get("register_globals")) {
return;
}

// Список разрешенных переменных
$allowed = array("GLOBALS", "_COOKIE", "_ENV", "_FILES", "_GET", "_POST", "_SERVER");
// Проходим по переменным...
foreach ($GLOBALS as $name => $value) {
if (!in_array($name, $allowed)) {
unset($GLOBALS[$name]);
}
}

}


Вызывать эту функцию надо в начале скрипта.

Боремся с magic_quotes


То же самое касается и magic_quotes_gpc, если она включена то можно сделать следующее:

function magic_quotes_gpc_off() {

if (!get_magic_quotes_gpc()) {
return;
}
function array_stripslashes($array) {
return is_array($array) ? array_map("array_stripslashes", $array) : stripslashes($array);
}
$_GET = array_stripslashes($_GET);
$_POST = array_stripslashes($_POST);
$_COOKIE = array_stripslashes($_COOKIE);

}


Надеюсь эта информация оказалась кому-либо полезной.
Tags:
Hubs:
+12
Comments 20
Comments Comments 20

Articles