sql更新数据库中的整个数据

时间:2019-01-30 10:28:01

标签: php sql-update

我已经编写了添加和更新用户的代码,并且还想添加和更新他们可以使用的类别。添加的用户将进入users表,而他们可以访问的类别进入category_permitted表。我有以下代码用于添加和更新表:

if ($user_info) {


if ($act == "add") {

if ($user_info) {
    $array = array(
            'user_id' => $user_info,
            'category_id' => $temp['cat_access']
    );

$category_permitted->addCategoryAccess($array);
}

} else {

if ($user_info) {

    $array = array(
            'user_id' => $id,
            'category_id' => $temp['cat_access']
    );

$deleteold = $category_permitted->deleteCategoryAccess($id);

$category_permitted->addCategoryAccess($array);
    }
}
    }

这是我添加和更新类别访问权限的功能:

public function addCategoryAccess($data, $is_die = false){

    return $this->insert($data, $is_die);

}

public function updateCategoryAccess($data, $id, $is_die = false){

    $args = array(
        'where' => array('user_id' => $id),
    );

    return $this->update($data, $args, $is_die);

}

这是数据库表click here to see database中的数据。

我的更新功能是在更新用户的类别访问权限时,使用要添加的数字来更新category_id列的所有数据。

我想保持2和3不变,并添加另一个类别ID 1,但是在运行更新代码后,它会像这样更新数据。click here to see unexpected result我是否必须向{{1 }}以获得预期的输出?

2 个答案:

答案 0 :(得分:0)

要仅更新一行,您需要该行的唯一标识符

如果列ID是主键,则可以使用该列仅更新相应的行。

$args = array(
    'where' => array('id' => $category_permitted_id),
);

或者,如果您知道哪个类别正在更改,并且关系(user_id,category_id)是唯一的,则可以将更改的类别添加到where。

$args = array(
    'where' => array(
        'user_id' => $user_id,
        'category_id' => $category_id
    ),
);

请注意,我不知道您的数据库抽象层,这意味着您可以简单地在数组中添加另一个条目以将条件放入“ AND”,这可能是不正确

以这种方式管理关系需要一些努力,我认为这是不值得的。 如果您能够修改应用程序逻辑,我建议您切换为仅使用插入/删除,如下所示:

  • 添加允许的类别:只需添加它即可创建带有插入的新记录

  • 删除允许的类别:通过删除功能将其删除

  • 将允许的类别更改为另一类别:删除正在更改的类别并添加新的类别

答案 1 :(得分:0)

在我的代码中执行此操作对我有用。我在for循环之前调用了函数$deleteold = $category_permitted->deleteCategoryAccess($id);,以避免删除每次迭代中删除的先前数据。

if ($user_info) {

$cat_access = (isset($_POST['cat_access']) && !empty($_POST['cat_access'])) ? ($_POST['cat_access']) : $_SESSION['cat_access'];

$value = array();

if (!empty( $cat_access ) && is_array( $cat_access ) ) {

  foreach( $cat_access as $key => $item ) {

    $value[] = filter_var( $item, FILTER_SANITIZE_NUMBER_INT );

  }

}

$categoryData = $value;

$temp = array();

    if ($categoryData) {

        $count = count($categoryData);

        if ($count > 0) {

            $deleteold = $category_permitted->deleteCategoryAccess($id);

            for($i=0; $i<$count; $i++){

            $temp =array(

                'cat_access' => $categoryData[$i]

            );

            if ($act == "add") {

                if ($user_info) {
                    $array = array(
                            'user_id' => $user_info,
                            'category_id' => $temp['cat_access']
                    );

                $category_permitted->addCategoryAccess($array);
                }

            } else {

                if ($user_info) {

                    $array = array(
                            'user_id' => $id,
                            'category_id' => $temp['cat_access']
                    );

                $category_permitted->addCategoryAccess($array);
                }
            }

        }

        }

}

}