Заменить кавычки в SQL-запросе в Perl-скрипте

У меня есть текстовый файл данных, который я импортирую в базу данных MySQL. Некоторые строки, к сожалению, содержат кавычки, из-за чего мои SQL-запросы не работают. Я хотел бы избавиться от любого поля, в котором есть кавычки, или, по крайней мере, игнорировать их в моем запросе.

Я нашел кое-что, что могло бы сработать, но поскольку это выполняется через сценарий Perl, у меня возникают проблемы с «исчезновением» кавычек. Я действительно не знаю, как это сделать, и не могу понять. Я хотел бы просто выполнить поиск по моей таблице и удалить любые кавычки ("), чтобы он мог найти или заменить их одной кавычкой, пробелом или чем-то еще.

my $myreplacequery = "REPLACE(s.Title, '"','')";
$sth = $dbh->prepare($myreplacequery);
$sth->execute;

У кого-нибудь есть идеи?

Спасибо!


person user1026801    schedule 01.11.2012    source источник
comment
Не могли бы вы изменить my $replacequery на $myreplacequery?   -  person Asad Saeeduddin    schedule 01.11.2012
comment
Можете ли вы опубликовать пример кода, который выходит из строя?   -  person RobEarl    schedule 01.11.2012
comment
Я не могу заставить это работать, поэтому я решил просто использовать perl для поиска/замены кавычек в файле, который я изначально ввожу в таблицы, прежде чем он даже попадет в SQL. Надеюсь, это сработает, пока не могу сказать.   -  person user1026801    schedule 08.11.2012


Ответы (3)


Измените запрос на UPDATE в этой таблице:

 update tablename set title = REPLACE(title,'\"','\'') where title like '%\"%'
person sufleR    schedule 01.11.2012

В Perl есть q и qq (операторы, подобные кавычкам). для такого рода ситуации. Они позволяют вам выбрать символ кавычки для использования. q действует как одинарная кавычка (') и не интерполирует (расширяет переменные), а qq действует как двойная кавычка (") и делает это.

my $replacequery = q{REPLACE(s.Title, '"','')};
person RobEarl    schedule 01.11.2012

На самом деле вы хотите передать строку, состоящую из одинарной кавычки, в REPLACE в качестве третьего аргумента, но вы передаете пустую строку. Необходимый SQL:

REPLACE(s.Title, '"', '\'') 

Чтобы создать эту строку в Perl, вы можете использовать любой из следующих строковых литералов:

"REPLACE(s.Title, '\"', '\\'')"    # Produces: REPLACE(s.Title, '"', '\'')

qq{REPLACE(s.Title, '"', '\\'')}   # Produces: REPLACE(s.Title, '"', '\'')

Обратите внимание, как нужно экранировать ". Без него Perl увидит следующий строковый литерал (за которым следует мусор):

"REPLACE(s.Title, '"
^                  ^
|                  |
start              end
of string          of string
literal            literal
person ikegami    schedule 01.11.2012