как избежать ввода, но сохранить неэкранированный в базе данных - PullRequest
3 голосов
/ 09 июля 2011

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

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

Так как мне использовать аддлэш и сохранять в базу данных без слешей? Так ли это на самом деле?

Ответы [ 3 ]

6 голосов
/ 09 июля 2011

Вы НЕ используете addslashes вы используете соответствующую функцию экранирования БД, такую ​​как 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');
0 голосов
/ 09 июля 2011

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

0 голосов
/ 09 июля 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...