Перейти к содержимому

real_escape_string

В этой статье мы обсудим функцию mysqli_real_escape_string() в PHP, которая используется для экранирования специальных символов в строках, предназначенных для использования в SQL-запросах.

Введение в функцию mysqli_real_escape_string()

Эта встроенная функция PHP экранирует специальные символы в строках, предназначенных для SQL-запросов. Она помогает предотвратить атаки SQL-инъекций, которые возникают, когда злоумышленники внедряют вредоносный SQL-код в запросы, выполняемые базой данных.

Как использовать функцию mysqli_real_escape_string()

Использование функции mysqli_real_escape_string() довольно просто. Вот пример:

php
<?php
$con = mysqli_connect('localhost', 'username', 'password', 'database');

if (!$con) {
    exit('Could not connect: ' . mysqli_error($con));
}

// Set charset to prevent multi-byte character vulnerabilities
mysqli_set_charset($con, 'utf8mb4');

$name = "John O'Reilly";
$name = mysqli_real_escape_string($con, $name);

$sql = "INSERT INTO customers (name) VALUES ('$name')";

if (!mysqli_query($con, $sql)) {
    exit('Error: ' . mysqli_error($con));
}

echo '1 record added';

mysqli_close($con);
?>

В этом примере мы сначала устанавливаем соединение с базой данных MySQL с помощью mysqli_connect(). Затем мы определяем переменную $name, содержащую одинарную кавычку. Вызов mysqli_real_escape_string() экранирует эту кавычку, гарантируя, что SQL-запрос выполнится без ошибок синтаксиса. Мы формируем запрос INSERT к таблице customers, выполняем его с помощью mysqli_query() и выводим сообщение об успехе.

Примечание: Всегда устанавливайте кодировку соединения (например, mysqli_set_charset($con, 'utf8mb4')) перед экранированием, чтобы предотвратить уязвимости, связанные с многобайтовыми символами. Хотя эта функция работает, современная разработка на PHP настоятельно рекомендует использовать подготовленные выражения с параметризованными запросами для повышения безопасности.

Заключение

Функция mysqli_real_escape_string() остается практичным инструментом для экранирования специальных символов в SQL-запросах. Правильное экранирование пользовательского ввода помогает обеспечить безопасность вашего приложения и защитить данные.

Практика

Что делает функция PHP mysql_real_escape_string?

Считаете ли это полезным?

Предпросмотр dual-run — сравните с маршрутами Symfony на продакшене.