Использование mysql для addlashes ()

Возможный дубликат:
Что делает mysql_real_escape_string (), что делает addlashes ()?

Если вы пытаетесь предотвратить внедрение sql, первое, что вам нужно сделать, это использовать mysql_real_escape_string. Можно ли вводить базу данных с помощью функции addslashes ()?

addslashes является грубым эквивалентом str_replace($str, "'", "\\'") . Вы можете обойти его тривиально с любым количеством последовательностей юникода, которые оцениваются до ' в mysql», но выглядят совершенно иначе, чем для addslashes() .

Mysql_real_escape_String() с другой стороны, использует фактическую внутреннюю функцию escaping mysql, которая точно знает, что искать и исправлять, чтобы сделать ее «безопасной» для mysql. То, что работает для mysql, может не работать для другой базы данных, так как у каждого есть несколько отличная семантика и требования к экранированию, но если вы работаете с mysql, то «реальная escape-строка» – это путь.

Это происходит, когда вы добавляете только косые черты на языке, который понимает кодировки Unicode (или смешивает кодировки при отправке запроса): http://bugs.mysql.com/bug.php?id=22243

В основном безопаснее знать, чего ожидает база данных в период кодирования – таким образом вы не сможете случайно избежать половину персонажа или оставить более позднюю часть символа без сохранения.

И все же это возможно, если вы добавите некотируемые данные в таблицу, т.е.

 SELECT * FROM tbl WHERE id = 10 

Здесь вы хотите убедиться, что этот идентификатор – это точно цифра

 $id = intval( $_GET[ 'id' ] ) ; $query = "SELECT * FROM tbl WHERE id = {$id}" ; $result = mysql_query( $query ) ; // ... bla-bla