2014-01-06 1 views
0

Мне нужно выполнить запрос MySQL с использованием регулярного выражения, а часть критериев содержит скобки.
Я знаю, как избежать скобок в MySQL ... используя двойную обратную косую черту.
Но это не работает, когда я помещаю запрос в строку, которая будет использоваться в perl.
Я пробовал приложить строку в апострофе и снова попытался использовать цитаты безрезультатно.
пример:mysql: как избежать скобок в строке perl

select * from table where fieldname regexp '.\\(.'; 

Вышеперечисленные работы с MySQL, но дает мне ошибку в Perl: «круглые скобки не сбалансирован»

+0

Вы можете поместить в код Perl, где вы делаете запрос к базе данных? – tadman

+0

@XiVix вам нужно отформатировать код для двойной обратной косой черты, чтобы показать, как я отредактировал ваш вопрос :) в целом всегда лучше форматировать фактический код, подобный этому, вместо того, чтобы помещать его в текст. –

+1

Вам нужно показать свой код Perl, так как это кажется проблемной областью. – cjm

ответ

2

Я полагаю, что ошибка была бы получена, если вы прошли

select * from table where fieldname regexp '.\(.'; 

вместо от

select * from table where fieldname regexp '.\\(.'; 

Вы уверены, что создали r строка правильно? Я подозреваю, что вы на самом деле построили бывшие струны.

Например, код

"select * from table where fieldname regexp '.\\(.';" 

производит нежелательное строку

select * from table where fieldname regexp '.\(.'; 

а код

"select * from table where fieldname regexp '.\\\\(.';" 

производит требуемую последовательность

select * from table where fieldname regexp '.\\(.'; 
+0

PERFECT! Спасибо! Это сделало трюк :) –

1

Проще всего использовать DBI quote, чтобы безопасно интерполировать переменные в строки SQL, если вы работаете с голой SQL (обратите внимание, что общим соглашением является использование какого-либо интерфейса SQL вместо этого для целого множества причин, объем этого ответа).

Так быстро/удобный способ добиться того, что вы хотите это:

#Assume $dbi is a handle to your database. 
my $reg = $dbh->quote(".\\(."); 
my $sth = $dbh->prepare("select * from mailone where msub regexp $reg limit 1");