2014-01-06 47 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 '.\\(.'; 

你確定你建立了你嗎?正確的字符串?我懷疑你實際上是建立了以前的琴絃。

例如,代碼

"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

完美!謝謝!這就是訣竅:) –

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"); 
相關問題