【问题标题】:I want affected rows data and column which has affected by update query in codeigniter我想要受codeigniter中更新查询影响的受影响的行数据和列
【发布时间】:2019-07-31 10:32:36
【问题描述】:

有没有办法在更新查询后只获取受影响的列? 在涉及 10 列的更新查询之后,我知道只有 2 列 真的更新了(因为其他 cols 的值没有改变)。 为了记录目的,我需要知道更改后的列的名称。

$this->db->query("UPDATE `table1` SET name = $name,......................,column10=10 WHERE id=$id")->result();
$this->db->affected_rows();

此代码给出了受影响的行数,但我想要数据并更新 列信息。

【问题讨论】:

  • 您能否也发布您用于查询的代码。这会帮助其他人。
  • 现在我只使用 $this->db->afffected_rows();获取受影响的行数。我不知道如何获得受影响的列。
  • 我的意思是实际的更新查询。发布整个代码部分将有助于了解您想要实现的目标。
  • 这是我正在使用的查询。
  • @Vikas 该查询无法更新 10 列,它只会更新 name

标签: php codeigniter mysqli


【解决方案1】:

据我所知,没有内置的 CodeIgniter 功能。不过,您可以将旧值与新值进行比较:

$last_record = $this->db->get_where('table1', array('id' => $id))->row_array();
$this->db->query("UPDATE `table1` SET name = $name,......................,column10=10 WHERE id=$id")->result();
// $this->db->affected_rows();
$new_record = $this->db->get_where('table1', array('id' => $id))->row_array();
$affected_columns = array_diff($new_record, $last_record);
foreach ($affected_columns as $field => $value) {
    echo "[field] : $field\r\n";
    echo "[old_value] : $last_record[$field]\r\n";
    echo "[new_value] : $value\r\n";
    echo "\r\n";
}

这将分别打印每个更新后的列及其旧值。

【讨论】:

  • 谢谢!!这也是一个好主意。但是如果我们得到 sql 查询,对我来说很容易,但没问题,它也可以这样工作。
猜你喜欢
  • 2013-05-30
  • 1970-01-01
  • 1970-01-01
  • 2013-02-16
  • 2019-11-20
  • 1970-01-01
  • 2018-12-10
  • 2011-06-11
  • 1970-01-01
相关资源
最近更新 更多