2012-06-07 61 views
2

我想在LIKE運算符模式中使用命名參數佔位符,以便正確轉義參數字符串。如何使用Adobe AIR中的LIKE運算符模式中的命名參數

這裏是我修改後的代碼,我現在用的是AT-PARAM佔位符:

VAR語句=新air.SQLStatement();

stmt.text =「SELECT * FROM comments WHERE title LIKE'%@ search%';」;

stmt.parameters [「@ search」] =「參數字符串」;

stmt.execute();

這樣做產生具有以下細節

消息的的SQLError:錯誤#3315:SQL錯誤。

細節: '@search' 參數姓名(或名稱)的參數屬性中找到,但不是在SQL指定

正如邁克·佩蒂建議,我想:

stmt.text = 'SELECT * FROM comments where title title LIKE「@%search%」;';

這產生了相同的SQL錯誤細節。

文檔具有這樣的:

EXPR :: =(列名|表達式)LIKE模式

圖案:: =「[字符串| %| _]'

我懷疑它是由於qoutes,如何使它工作的想法跳過?

回答

4

找到了一個解決方案,基本上而不是做這樣的:

var stmt = new air.SQLStatement(); 
stmt.text = "SELECT * FROM comments WHERE title LIKE '%@search%';"; 
stmt.parameters["@search"] = "argument string"; 
stmt.execute(); 

你必須把一個佔位符整個LIKE操作模式並將模式綁定爲參數。

var stmt = new air.SQLStatement(); 
stmt.text = "SELECT * FROM comments WHERE title LIKE @search;"; 
stmt.parameters["@search"] = "%" + userInput + "%"; 
stmt.execute(); 
+0

恭喜修復!如果可以,請確保將您的答案標記爲「已接受」,以便其他人能夠從您的成功中學習。乾杯〜 –

0

從您的字符串中刪除您的字符串。

像作品只是罰款:

SELECT * FROM comments WHERE comments.title LIKE '%string%'; 
+0

我很抱歉,如果它是不明確的,它是有一個安全原因 – user1423172

+0

那麼,它肯定工程:http://d.pr/i/Pz1I你有下載的精簡版SQL瀏覽器/編輯器。麗塔很不錯。 lita:http://www.dehats.com/drupal/?q=node/58 –

+0

永遠不要說它不起作用,反正我編輯了我的問題,也許它現在更清晰了,現在我想實現的目標 – user1423172

0

很難從你的問題告訴,但當前的語句中拋出的SQLError,只是無法編譯,或者只是不返回任何結果?

如果我猜我會說你有幾個問題在這裏:

  1. 你不應該限定列在where子句中,因爲你只有1臺從
  2. 選擇
  3. 參數字符串在技術上是AIR/Actionscript的一個保留字(儘管情況不同) - 仍然有點混淆。

即使文檔和代碼允許你使用任何結腸,或符號,我的選擇是@,因爲這是一個有點更容易看到;)

不要忘記添加您期望行的類的itemClass定義 - 這有助於避免匿名對象。

這應該是相當簡單的:

var stmt:SQLStatement = new SQLStatement(); 
    stmt.itemClass = Comment; 
    stmt.text = 'SELECT * FROM comments WHERE title LIKE "@%search%";'; 
    stmt.parameters['@search'] = userInput.text; 
    stmt.addEventListener(SQLEvent.RESULT, onResults); 
    stmt.execute(); 
+0

#1 ,#2不應該是一個問題,無論如何修改的問題,以避免混淆 匿名對象應該現在罰款,稍後將查找它後,我找到了SQL錯誤的解決方案 謝謝! – user1423172

相關問題