Я хотел бы избежать вручную спасаясь/дезинфицирующий переменные и просто использовать подготовленные заявления. Это было то, чему я не научился, намного позже в моей карьере развития сети, и мне жаль, что я не узнал об этом раньше. Это сэкономит вам массу неприятностей и будет безопаснее всего.
Вы можете использовать mysqli_stmt
class для выполнения MySQL-запросов с помощью подготовленных операторов, или вы можете использовать PHP Data Objects (PDO) extension, который работает с MySQL, PostgreSQL и другими РСУБД.
Просто, чтобы показать вам, как это выглядит, вот первый пример из PDOStatement->bindParam
doc page:
<?php
/* Execute a prepared statement by binding PHP variables */
$calories = 150;
$colour = 'red';
$sth = $dbh->prepare('SELECT name, colour, calories
FROM fruit
WHERE calories < :calories AND colour = :colour');
$sth->bindParam(':calories', $calories, PDO::PARAM_INT);
$sth->bindParam(':colour', $colour, PDO::PARAM_STR, 12);
$sth->execute();
?>
Похоже, у вас есть ?! Каков печатный результат вашего SQL-запроса? –