Говорят, что для предотвращения внедрения 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), вам не нужно бежать или фильтровать что-либо.