2011-06-03 74 views
1

我想將(1,2,3)傳遞給where子句的IN查詢。像這樣的東西。PHP中的PDO:綁定參數中的問題

$sql = $db->prepare(" 
    SELECT 
     id, attribution,.......................... 
    FROM 
     filterdaiict 
    WHERE Checkbox 
     IN (:checkbox) 
    HAVING 
     distance < :radius 
    ORDER BY 
     distance ASC 
    LIMIT 
     0, 50 
"); 

$sql->bindParam(
    ':checkbox', 
    GetCheckboxValue ($value['CHECKBOXLIST']), 
    PDO::PARAM_STR 
); 

其中功能GetCheckboxValue ($value['CHECKBOXLIST'])返回像1,2,3一樣的字符串。 此代碼不起作用。我不知道錯誤在哪裏。讓我知道。提前致謝。

回答

1

你將不得不建立他們自己查詢。

$ids = array(1, 2, 3); 
$querystr = implode(',', $ids); 

$sql = $db->prepare(" SELECT id, attribution,...... .................... 
    FROM filterdaiict where Checkbox IN ($querystr) 
    HAVING distance < :radius 
    ORDER BY distance ASC LIMIT 0, 50 "); 
+0

謝謝你......它的工作......非常感謝你 – papu 2011-06-03 08:57:08

+0

@papu不要使用這個解決方案,而應該使用TheCandyMan給出的解決方案。 – 2011-06-03 09:19:57

+1

不要使用TheCandyMan給出的那個,因爲它不起作用。該值將被綁定爲'1,2,3',這將不符合預期的1,2或3。這種方法可行,但需要參數的消毒;更好的方法是動態構建查詢字符串;我會在下面添加一個答案。 – 2011-06-03 09:29:55

3

本示例建立在SamT的上面的答案上,以構建查詢字符串,但仍然綁定參數。

// Get your IDs into an array 
$ids = explode(',', GetCheckboxValue($value['CHECKBOXLIST'])); 

// Build a list of placeholders that we can use in the query 
$params = array(); 
foreach ($ids as $idx => $val) { 
    $key = ':checkbox' . $idx; 
    $params[$key] = $val; 
}  

// Join the keys to use as placeholders 
$querystr = implode(', ', array_keys($params)); 

// Prepare our statement using the placeholders we made above 
$sql = $db->prepare(" SELECT id, attribution,...... .................... 
    FROM filterdaiict where Checkbox IN ($querystr) 
    HAVING distance < :radius 
    ORDER BY distance ASC LIMIT 0, 50 "); 

// Bind a value for each key 
foreach ($params as $key => &$val) { 
    $sql->bindParam(
     $key, 
     $val,  
     PDO::PARAM_STR 
    ); 
} 
+1

是的,您對SamT的回答發表了評論。刪除了我的答案。 – enricog 2011-06-03 09:50:37