2011-07-15 43 views
1

我有一個單一的字符串參數從我的表測試,其中有兩個字段id(int)和名稱(varchar)的檢索記錄的過程。 過程中的查詢被顯示在下面MYSQL&C#:如何轉義SELECT WHERE IN(...)子句中的元素?

Select * from test where id in (strParam); 

和在參數值將是

strParam="1,2"; 

但其結果將是錯誤的,因爲查詢將被如下所示

Select * from test where id in ('1,2'); 

但我需要查詢如下所示

Select * from test where id in (1,2); 

請幫我解決 編程語言是C# 感謝, SURAJ

+1

哪種編程你用什麼語言來構造'strParam'? PHP? – Konerak

+0

@konerak對不起,我錯過了它,它在C#中。 – Suraj

回答

0

通常你正確構造SQL在你的編程語言:

Select * from test where id in ('1,2'); 

應該來自你的應用程序代碼 ,在那裏更容易改變strParam="1,2";strParam="'1','2'"

  • 斯普利特(爆炸)串入一個數組
  • 逃生陣列中的每個元素(使用正確的MySQL逃生功能)
  • 加入(破滅)陣列回字符串,

如果您真的不能更改應用程序代碼,也許一些SQL技巧可以工作。嘗試:

SELECT * FROM test where FIND_IN_SET(ID,strParam) > 0 
+0

這就是我需要的功能FIND_IN_SET謝謝Konerak – Suraj

0

不知道這是最有效的方法:

爆炸的價值strParam到一個數組,然後建立你的查詢需要的字符串:

<?php 

$arrayParam = explode(',', $strParam); 
$strParamQuery = '('; 

foreach ($arrayParam as $Param) { 
    if ($strParamQuery != '(') { $strParamQuery = $strParamQuery.','; //Add a comma to all but the first occurence 
    $strParamQuery = $strParamQuery.$param; 
} 

$strParamQuery = $strParamQuery.')'; 

$query = 'Select * from test where id in '.$strParamQuery.';'; 
?> 
+0

噢。不是PHP。我不知道C#;) – Rick