我想要受代码点火器更新查询影响的行数据和列

I want affected rows data and column which has affected by update query in codeigniter

提问人:Vikas Rathor 提问时间:7/31/2019 最后编辑:Vikas Rathor 更新时间:8/1/2019 访问量:361

问:

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

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

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

php codeigniter mysqli

评论

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

答:

0赞 Hasta Dhana 8/1/2019 #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";
}

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

评论

0赞 Vikas Rathor 8/2/2019
谢谢!!这也是一个好主意,但是如果我们得到sql查询,这对我来说很容易,但没问题,它也可以这样工作。