2014-11-01 68 views
0

我是SQL初學者,在用戶生成的數據中使用括號和星號等特殊字符時遇到了一些問題。到目前爲止,我大多使用了很多專門的方法來擺脫這些角色,並且他們工作得很好。基於我讀過的內容,我認爲參數化查詢可能是解決我所遇到的一些問題的更系統的方法。在參數化語句中選擇其他行的列

我有以下查詢:

insert into midstep (street)(select street from addresses limit 10) 

表中的地址欄街道有很多括號的,星號等上述工作的代碼如預期。我想要做的是這樣的:

prepare midstreet (text) AS insert into midstep (street)(select $1 from addresses limit 10); 
execute midstreet (street from addresses); 

然而,當我在代碼中,我得到以下錯誤信息,請輸入:

ERROR: syntax error at or near "from" 
SQL state: 42601 
Character: 29 

我已經試過這個代碼和一系列的變化閱讀關於PrepareExecute的文檔,但始終會收到錯誤消息。任何幫助表示讚賞!

編輯:我忘了提及,我使用postgresql 9.3和我的操作系統是Ubuntu。請詢問是否需要更多信息來幫助!

回答

0

在你的情況下,你不需要參數,因爲你使用子查詢來獲取你的值。事實上,你無法知道服務器端需要的值。當且僅當您在應用程序級別定義了一些值並且您想將它們傳遞給數據庫時,才需要類似這樣的參數。

+0

如果參數化不是要走的路,你會推薦什麼來擺脫禁忌和星號?我會將這些數據傳遞給一個不知道如何處理括號和星號的地理編碼器。 – 2014-11-02 00:19:11

+0

當您在RDBMS內部查詢時,沒有SQL注入的危險。當您查詢某些內容並從RDBMS外部添加參數時,SQL注入是一種可能的危險。如果你有價值,就像我餓了一樣,你不會因爲'錯誤'而得到錯誤。問題是當你生成你的查詢時,結果如下所示:select * from users where username ='';從用戶中刪除;' – 2014-11-02 01:56:08