2012-05-11 41 views
2

我有一個字段,可能包含單引號,它存儲在與單引號分貝。例如,這些字段可能是這樣的。如何使用單引號從postgres數據庫搜索字段?

1 |某某的朋友| 21.3

2 |打招呼,TTY的朋友| 42.2

用戶輸入基於搜索查詢上的值需要顯示。

例如,如果用戶輸入 - > XYZ的存儲在一個變量(PHP)

我不能做

select * from table where field LIKE '%variable%' 

,因爲變量中已經有報價。和Postgres是不是讓我用雙引號周圍的%變量%

我也試圖做這樣的

select * from table where field LIKE E'%variable%' 

東西使用轉義序列,但不工作過。任何幫助?

回答

0

您有\逃避引號字符,如

select * from table where field LIKE E'%xyz\'s%' 

你應該能夠使用它之前「與\」在字符串中只需更換。

另外請注意,它通常是一個非常糟糕的想法使用查詢參數直接由用戶輸入查詢。 PHP可能有一個模塊,可以爲你清理輸入;你應該使用它。

+1

我相信在9.1它甚至不會工作,因爲它默認爲'standard_conforming_strings = true' –

+0

這個問題已經說他正在使用E'...'語法,所以\「將工作得很好。你可以同樣使用''而不是'',無論你的船漂浮在哪裏。 – verdesmarald

6

不要試圖自己引用事情,使用庫。在這種情況下,你想要pg_escape_string。因此,添加百分比包裝,然後將其提供給pg_escape_string,然後將結果放入SQL中。

另一方面,在PostgreSQL字符串文字中轉義單引號的正確方法是將其加倍,如果將"it's"作爲字符串,則數據庫希望在SQL中看到'it''s'