1

我的模型中有两个功能。第一:

    public function updateOwn($game,$own,$user) {

    $data = array(
        'own' => $own
    );

    $q = $this->db->where(array(
        'game' => $game,
        'user' => $user
    ));

    $q = $this->db->update('ownership',$data);

    if($q) { return true; } else { return false; }
}

第二个:

    public function updateRate($game,$rate,$user) {

    $data = array(
        'rate' => $rate
    );

    $q = $this->db->where(array(
        'game' => $game,
        'user' => $user
    ));

    $q = $this->db->update('rates',$data);
    $q = $this->db->update('ownership',$data);

    if($q) { return true; } else { return false; }
}

问题是,第一个有效,第二个无效。我的意思是,它可以工作,但它会更新每一行,而不仅仅是那些匹配gameuser. 变量传递良好。

4

4 回答 4

2

where 条件仅适用于第一个更新语句。下面试试。

$data = array(
    'rate' => $rate
);

$where = array(
    'game' => $game,
    'user' => $user
);

$q = $this->db->update('rates', $data, $where);
$q = $this->db->update('ownership', $data, $where);
于 2012-08-13T08:03:17.867 回答
0

将 where 数组作为第三个参数传递,以确保它正常工作:

$q = $this->db->update('rates',$data,array(
        'game' => $game,
        'user' => $user
    ));
于 2012-08-13T08:03:17.923 回答
0

CodeIgniter 会在执行后重置您构建的许多查询参数。您需要在第一次 update() 调用之后重新添加 WHERE 子句。

public function updateRate($game,$rate,$user) {

$data = array(
    'rate' => $rate
);

$q = $this->db->where(array(
    'game' => $game,
    'user' => $user
));

$q = $this->db->update('rates',$data);
$q = $this->db->where(array(
        'game' => $game,
        'user' => $user
    ));
$q = $this->db->update('ownership',$data);
if($q) { return true; } else { return false; }
}
于 2012-08-13T08:04:03.430 回答
0

首先,为什么每次都需要设置 $q 变量?其次,在最后一条语句中,您仅检查是否完成了第二次查询。

我会做类似的事情:

public function updateRate($game,$rate,$user) {
  $data = array(
    'rate' => $rate
  );

  $this->db->where('game', $game)->where('user', $user);
  $first_query = $this->db->update('rates',$data);

  $this->db->where('game', $game)->where('user', $user);
  $second_query = $this->db->update('ownership',$data);

  return $first_query && $second_query;
}
于 2012-08-13T08:04:19.367 回答