Кавычки в 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>
Убедитесь, что эта форма имеет проблему с кавычками. Избавьтесь от проблемы.