как избежать ввода, но сохранить не привязанные к базе данных

Говорят, что для предотвращения внедрения SQL необходимо фильтровать входные данные, например. с addlashes или mysql_real_escape_string в зависимости от используемых модулей подключения

Однако данные, сбрасываемые с помощью addlashes, сохраняются в базе данных с косой чертой, поэтому фамилия пользователя будет сохранять как O \ 'Reilly вместо O'Reilly. Для правильного отображения нужно использовать полосы.

Итак, как я могу использовать addlashes и сохранять в базе данных без косой черты? Действительно ли это так, как это должно быть сделано?

Вы mysql_real_escape_string использовать addslashes вы используете соответствующую функцию escaping для DB, mysql_real_escape_string как mysql_real_escape_string .

если вы используете PDO, то использование подготовленного оператора приведет к исчезновению переменных как части процесса привязки. В этом случае все, что вам нужно сделать, это что-то вроде:

 $pdo = new PDO($dsn, $user, $name); $stmt = $pdo->prepare('INSERT INTO your_table (col1, col2,col3) VALUES (?, ?, ?)'); $stmt->execute(array('value 1', 'value 2', 'value 3'); 

ИЛИ для дополнительной удобочитаемости и повторного использования esier вы можете использовать именованные параметры:

 $pdo = new PDO($dsn, $user, $name); $stmt = $pdo->prepare('INSERT INTO your_table (col1, col2,col3) VALUES (:col1, :col2, :col3)'); $stmt->execute(array(':col1' =>'value 1', ':col2' =>'value 2', ':col3' =>'value 3'); 

Предполагается, что addslashes должны быть односторонним механизмом экранирования. Если вы выходите из MySQL с добавленными строками с добавлением, то, конечно, значение, включающее в себя addslash слэши, будет сохранено в базе данных. Используйте либо, либо не оба.

Сказав это, не используйте addslashes . Это не имеет реальной цели. Используйте специальный механизм экранирования для соответствующей ситуации. Т.е., используйте только mysql_real_escape_string . Или подготовленные заявления, которые позволяют избежать всего бегства.

Если вы используете подготовленные операторы (например, через PDO или в библиотеке mysqli), вам не нужно бежать или фильтровать что-либо.