Курсы по Laravel
Открыта запись на бесплатный пробный месяц! Жми для подробностей! →
57 of 95 menu
По вашим просьбам сделал СВЕЖУЮ ОФЛАЙН ВЕРСИЮ номер 4 (временную). Рекомендую скачать на случай проблем с доступностью сайта.

Кавычки в SQL запросах в PHP

Бывают случаи, когда в SQL запросе мы используем текстовое значение, содержащее внутри себя кавычку. В этом случае мы получим ошибку синтаксиса SQL:

<?php $query = "SELECT * FROM users WHERE login='D'Artagnan'"; $res = mysqli_query($link, $query) or die(mysqli_error($link)); // выведет ошибку ?>

Для решения проблемы нужно эту кавычку экранировать с помощью обратного слеша:

<?php $query = "SELECT * FROM users WHERE login='D\'Artagnan'"; $res = mysqli_query($link, $query) or die(mysqli_error($link)); ?>

Как правило, однако, текст с кавычкой мы не пишем в явном виде, а берем из переменной. Например, вот так:

<?php $login = 'D\'Artagnan'; $query = "SELECT * FROM users WHERE login='$login'"; $res = mysqli_query($link, $query) or die(mysqli_error($link)); ?>

Также наш текст может прийти из формы, которую заполняет пользователь. В этом случае мы получаем место, потенциально подверженное ошибке. В следующем примере будет ошибка, если пользователь введет данные с кавычкой:

<?php $login = $_POST['login']; $query = "SELECT * FROM users WHERE login='$login'"; $res = mysqli_query($link, $query) or die(mysqli_error($link)); ?>

Для решения проблемы нам необходимо воспользоваться функцией с очень длинным именем: mysqli_real_escape_string. Эта функция сама заэкранирует кавычки в тексте (и некоторые другие проблемные символы тоже):

<?php $login = mysqli_real_escape_string($link, $_POST['login']); $query = "SELECT * FROM users WHERE login='$login'"; $res = mysqli_query($link, $query) or die(mysqli_error($link)); ?>

Пусть у вас есть некоторая таблица articles со статьями. Пусть есть также следующая форма:

<form action="" method="POST"> <input name="title"> <textarea name="text"></textarea> <input type="submit"> </form>

Убедитесь, что эта форма имеет проблему с кавычками. Избавьтесь от проблемы.

csuzuzcesro