Экранирование и запросы Perl DB - PullRequest
1 голос
/ 17 октября 2011

Мне нужно манипулировать некоторыми записями в БД и записывать их значения в другую таблицу.У некоторых из этих значений есть «&» в строке, то есть «Me & You».Если не считать все эти значения и не ставить \ перед любыми символами &, как можно вставить эти значения в таблицу без оракула над символом &?

Ответы [ 2 ]

12 голосов
/ 17 октября 2011

Использовать заполнители. Вместо ввода '$who' в свой оператор SQL подготовьте с? вместо этого, а затем либо связать $ who, либо выполнить с $ who в качестве подходящего аргумента.

my $sth = $dbh->prepare_cached('INSERT INTO FOO (WHO) VALUES (?)');
$sth->bind_param(1, $who);
my $rc = $sth->execute();

Это безопаснее и быстрее, чем пытаться сделать это самостоятельно. (В DBI есть метод «цитата», но он лучше).

8 голосов
/ 17 октября 2011

Это определенно колесо, которое вам не нужно изобретать заново.Если вы используете DBI, не экранируйте ввод;использовать заполнители.

Пример:

my $string = "database 'text' with &special& %characters%";
my $sth = $dbh->prepare("UPDATE some_table SET some_column=?
                         WHERE some_other_column=42");
$sth->execute($string);

Модуль DBD::Oracle (и все остальные модули DBD::xxxxx) прошли обширное тестирование и используются в реальных условиях.Пусть он беспокоится о том, как вставить ваш текст в базу данных.

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