检查更新查询中修改了哪些列

vxf3dgd4  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(288)

当我们用php更新mysql记录时,我们可以使用以下方法检查它是否有效:

$mysqli->affected_rows;

但如何检查哪一列已被修改?
例如,在我的表中有以下列:id/name/age
我们有一个记录:1/woton/18
如果我发了一封信: UPDATE mytable SET name = 'Woton', age = '20' WHERE id = '1' 只有“年龄”字段已更改。我怎样才能确定这一点?

siotufzp

siotufzp1#

不能直接从查询结果中获取更新的列。
它可以从一些php查询中获得。首先,我们必须从数据库中选择要在数组变量中更新的行。然后对同一行运行更新查询。
最后,从新数组变量的select query中从数据库中获取相同的行。
最后我们得到两个数组。
我们可以使用array\u diff\u assoc php函数获得更新的列。
请参见下面的代码。

$sql = "SELECT *  from mytable where id=1 limit 1";
$prev = mysqli_fetch_assoc(mysqli_query($conn, $sql));

//Get the column data in the array. Before update.

$sql = "UPDATE mytable SET name = 'Woton', age = '20' WHERE id = '1'";
$conn->query($sql);

// Update data 

$sql = "SELECT *  from mytable where id=1 limit 1";
$updated = mysqli_fetch_assoc(mysqli_query($conn, $sql));

// Again run the select command to get updated data.

$UpdatedColumns=array_diff_assoc($updated,$prev);
oogrdqng

oogrdqng2#

另一个注意事项是:如果在数据库中启用了querylog,那么您(或者您的php或python脚本)可以很容易地看到/读取内容的哪个部分已经更新,甚至可以监视数据库。
好消息是,甚至可以针对哪个表、哪个查询等。

相关问题