多维数组插入并更新到数据库中

时间:2012-09-20 23:59:45

标签: php mysql arrays

我有一个多选下拉框,它会生成一个这样的数组:

 array(3) { [0]=> string(1) "1" [1]=> string(1) "6" [2]=> string(1) "7" }

我无法解决的是如何获取多选下拉框以插入更新并从数据库中选择或从数据库中选择。我似乎只得到一个值

我目前的代码情况是这样的 - >以上是var_dump的内容:

SELECT * FROM {table} WHERE canid=? AND categoryid=?", array($emailCheck['id'], $fields['Occupation'][0]));

更新声明:我怎么能破坏这个?

UPDATE {table} SET canid=?, categoryid=? WHERE canid=? AND categoryid=?", array($emailCheck['id'], implode(',', $fields['Occupation']));

我的数据库结构是:

enter image description here

2 个答案:

答案 0 :(得分:1)

如果我理解正确并且$fields['Occupation']包含来自下拉列表的多个选定值,则使用AND categoryid IN (?)并使用implode将数组合并为字符串,如下所示:implode(',', $fields['Occupation'])

完整的代码如下所示:

myFunction("SELECT * FROM {table} WHERE canid=? AND categoryid IN (?)", array($emailCheck['id'], implode(',', $fields['Occupation'])));

<强>更新

我认为在这种情况下,当你需要独立地为每一行更改这些列时,最好在PHP中循环遍历数组并进行单独的查询:

for($i=0; $i<count($fields['Occupation']); $i++) {
    $id = $fields['Occupation'][$i];
    // here make query like before
    myFunction("UPDATE {table} SET canid=?, categoryid=? WHERE canid=? AND categoryid=?", array($emailCheck['id'], $id));
}

答案 1 :(得分:0)

您必须为每个值动态生成参数占位符

$params = array_merge(array($emailCheck['id']), $fields['Occupation']);
$catPlaceholders = '?'.str_repeat(',?',count($fields['Occupation'])-1);

myFunction("SELECT * FROM {table} WHERE canid=? AND categoryid IN ("
        .$catPlaceholders.")", $params);