Во-первых, не используйте addslashes()
- его не рекомендуется использовать для экранирования строк запроса БД, потому что он не экранирует все, что действительно необходимо экранировать; есть некоторые персонажи, которые еще могут пройти.
Правильное решение зависит от базы данных, которую вы используете. Предполагая, что вы используете MySQL, правильная функция вместо addslashes()
- mysql_real_escape_string()
.
Вы, вероятно, заметили, что использование этого в каждой строке даже более многословно, чем addslashes()
, поэтому оно не отвечает на ваш вопрос.
Если все ваши поля представляют собой отдельные переменные (в соответствии с вашим примером), то вы действительно застряли с этим для нескольких строк кода.
Если вы используете массив (например, $_POST
), то вы можете сделать это в цикле, который сделает вещи намного лучше - вы можете сделать что-то вроде этого:
foreach($_POST as $key=>$value) {
$sqlstrings[$key]="`".$key"` = '".mysql_real_escape_string($value)."'";
}
$sql = "update table ".implode(' ',$sqlstrings)." where id=".$update_id;
Более современный метод для выполнения SQL - использовать объектную модель, а не строить запросы вручную. PHP имеет ряд библиотек, которые могут помочь: mysqli
- улучшенная библиотека MySQL, а PDO
- библиотека, не зависящая от базы данных. Любой из них обеспечит вам гораздо большую безопасность и гибкость, чем непосредственное построение кода SQL. Однако, если у вас уже есть много кода на месте, они будут представлять довольно значительные накладные расходы на изменения кода, так что вы можете использовать опцию mysql_real_escape_string()
, рассмотренную выше, в краткосрочной перспективе. Я рекомендую вложить их, хотя.