Экранирование данных перед записью в БД

Рецепт №117. Из книги «128 рецептов php»
Перейти к оглавлению

В предыдущих рецептах происходила запись данных в таблицу БД в таком виде, каком они есть. Так делать можно только в том случае, если данные генерируются на сервере. Но если нужно записать данные, которые отчасти или полностью пришли с клиента, например, по средствам POST или GET запроса, то осуществлять запись без экранирования данных нельзя. Поскольку это может привести к созданию «дыры» в коде, через которую будет очень просто взломать или навредить работе базе данных или всего сайта.

Экранировать данные можно несколькими способами, если данные имеют числовое значение, то их нужно привести к числовому виду – целому числу или числу с плавающей точки, с помощью функций int или float. А если данные имеют строковый тип, то экранировать их нужно функцией mysql_real_escape_string.
Пример:

define("HOST", "localhost");
define("USER", "root");
define("PASSWORD", "");
define("DB_NAME", "test_db");

//подключение к MySql
$db_connect = mysql_connect(HOST, USER, PASSWORD, TRUE); 
if (!$db_connect) {
    die('Ошибка подключения: ' . mysql_error());
}
// выбор базы данных
mysql_selectdb(DB_NAME, $db_connect);
// устанавливаем кодировку
mysql_set_charset("utf8");

// получаем данные из POST запроса
// имя
$first_name = $_POST['first_name'];
// фамилия
$last_name = $_POST['last_name'];
// возраст
$age = $_POST['age'];

// экранируем данные
// строки
$first_name = mysql_real_escape_string($first_name);
$last_name = mysql_real_escape_string($last_name);
// число
$age = (int)$age;

// создание записи в таблице
$result = mysql_query("	
    INSERT INTO `tbl_users` (`f_name`, `l_name`, `age`) 
	VALUES ('{$first_name}', '{$last_name}', {$age})
");
Рассказать друзьям:


Экранирование данных перед записью в БД: 1 комментарий

  1. Нужно бы указать что не для всех версий PHP и начиная с 5.3 поддерживаться не будет…

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*