将数组集合作为参数传递给MySQL查询

时间:2012-08-06 09:58:43

标签: php mysql checkbox implode

我在这里尝试做的是从mysql生成的复选框中获取数据。复选框数据是数组。因此,对于所有选中的复选框,我希望将每个复选框用作查询中的参数,以从另一个数据表中获取更多信息。

以下示例代码

if (isset($_POST['submitCourseCode'])) { 
     //GET ARRAY FROM DATABASE GENERATED CHECKBOXES                                         
     $aElective =  $_POST['electiveModules'];


    foreach($aElective  as $snode) {                                                    
        echo "$snode <br />";
    }
    //PASSING EACH DATA FROM ARRAY INTO QUERY   
    $Query = "SELECT ID,title,credits 
             FROM module 
             WHERE ID IN('" . implode("', '", $aElective) ."')";

    $Result = mysql_query($Query) 
    or die ("Query failed: " . mysql_error() . " Actual query: " . $Query);

    while ($Row = mysql_fetch_array($Result)) {

           $id = htmlentities($Row['ID']);
           $title = htmlentities($Row['title']);
           $credits = $Row['credits'];

    echo "<ul>" . $id . " " . $title .  " " . $credits . "</ul>";

    }  
}
var_dump($Query);   
var_dump($Result);  
var_dump($Row);     

我的结果截图 enter image description here

我猜测我的查询可能会发生一些事情可能是因为内幕函数但我的查询中的一切似乎都很好。有什么建议我做错了?

2 个答案:

答案 0 :(得分:1)

您需要使用array_map('trim', $aElective)修剪数组元素:

$Query = "SELECT ID,title,credits 
         FROM module 
         WHERE ID IN('" . implode("','", array_map('trim', $aElective)) ."')";

答案 1 :(得分:1)

IN子句中的ID之前存在空格问题。

尝试添加str_replace()电话

$Query = "SELECT ID,title,credits 
         FROM module 
         WHERE ID IN('" . str_replace(" ", "", implode("', '", $aElective)) ."')";