Правила добавления строк в запрос просты и понятны:
- Строка должна быть заключена в кавычки.
- Следовательно, эти кавычки следует экранировать в данных, а также в некоторых других символах, используя
mysql_real_escape_string()
Итак, ваш код становится
$type = 'testing';
$type = mysql_real_escape_string($type);
$reporter = "John O'Hara";
$reporter = mysql_real_escape_string($reporter);
$query = "INSERT INTO contents (type, reporter, description)
VALUES('$type', '$reporter', 'whatever')";
mysql_query($query) or trigger_error(mysql_error()." in ".$query);
// note that when running mysql_query you have to always check for errors
Но если вы собираетесь добавить переменную в другую часть запроса, правила изменятся.
- Чтобы добавить число, вы должны явно привести его к его типу.
Например:
$limit = intval($_GET['limit']); //casting to int type!
$query = "SELECT * FROM table LIMIT $limit";
- Чтобы добавить идентификатор, лучше выбрать его из какого-то белого списка, состоящего из жестко закодированных значений
Например:
if ($_GET['sortorder'] == 'name') {
$sortorder = 'name';
} else {
$sortorder = 'id';
}
$query = "SELECT * FROM table ORDER BY $sortorder";
Чтобы упростить все это , но с гарантированной безопасностью, нужно использовать какую-то систему заполнителей , где переменная входит в запрос не напрямую, а через некоторый прокси, называемый заполнитель.
Итак, ваш запрос будет выглядеть примерно так:
$type = 'testing';
$reporter = "John O'Hara";
pquery("INSERT INTO contents (type, reporter, description) VALUES(?s, ?s, ?s)",
$type, $reporter,'whatever');
И обо всем этом совершенно не нужно будет беспокоиться.
Для ограниченного набора заполнителей вы можете использовать PDO . Хотя для реального использования вам понадобится расширенный набор, который предлагается всего несколькими библиотеками, одна из которых SafeMysql .