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

Php 检查更新查询中修改了哪些列,php,mysql,mysqli,sql-update,Php,Mysql,Mysqli,Sql Update,当我们使用php更新MySQL记录时,我们可以使用以下方法检查它是否有效: $mysqli->affected_rows; 但我如何检查哪一列已被修改 例如,在我的表格中有以下列:id/name/age 在记录中,我们有数据:1/Woton/18 如果我发送一个:updatemytable SET name='Woton',age='20',其中id='1' 只有年龄字段已更改。如何确定这一点?您无法直接从查询结果中获取更新的列 它可以从一些php查询中获得。首先,我们必须从数据库中选择

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

$mysqli->affected_rows;
但我如何检查哪一列已被修改

例如,在我的表格中有以下列:id/name/age

在记录中,我们有数据:1/Woton/18

如果我发送一个:
updatemytable SET name='Woton',age='20',其中id='1'


只有年龄字段已更改。如何确定这一点?

您无法直接从查询结果中获取更新的列

它可以从一些php查询中获得。首先,我们必须从数据库中选择要在数组变量中更新的行。然后对同一行运行更新查询

最后,从新数组变量中的select query从数据库中获取相同的行

最后我们得到两个数组

我们可以使用array_diff_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);

不能直接从查询结果中获取更新的列

它可以从一些php查询中获得。首先,我们必须从数据库中选择要在数组变量中更新的行。然后对同一行运行更新查询

最后,从新数组变量中的select query从数据库中获取相同的行

最后我们得到两个数组

我们可以使用array_diff_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);

另一个注意事项是:如果在数据库中启用了QueryLog,那么您(或您的PHP、Python脚本或任何脚本)可以很容易地看到/读取内容的哪些部分已经更新,甚至可以监视数据库


好消息是,您甚至可以用另一种方式确定哪个表、哪个查询等。如果数据库中启用了QueryLog,那么您(或您的PHP、Python脚本或任何脚本)可以轻松查看/读取更新的内容的哪一部分,甚至可以监视数据库


好消息是,即使您可以针对哪个表、哪个查询等等。

没有内置功能来报告哪些列发生了更改。我们可以检查当前值并与触发器中新分配的值进行比较,但是我们需要某种机制来将信息从触发器传递给调用方。这也不是内置的功能,所以我们需要决定是使用用户定义的变量,还是使用另一个表。由于UPDATE语句可能会影响多行,因此我们需要决定如何报告多行的结果。此外,
SET id='1',
with
WHERE id='1'
将无法以您期望的方式工作。我认为
id
主自动递增键
这个触发器,它会是什么样子?我会在正确的数据库中配置它,但是如何在php命令的响应中使用它呢?这是主要原因point@WotonSampaio您正在使用PHP。只需选择更新前后的行并比较值即可。@WotonSampaio只想要MySQL,请参阅上面spencer的评论,这也让我有些不知所措。一个额外的查询其实没什么大不了的,除非您在单独的查询中更新数百行。但这里有另一个想法。重新评估是否有必要。有人更新了他们的信息,只需说“你的信息已成功更新”,就可以了。不需要说他们更新了什么。无论如何,他们应该已经知道了。也不要存储他们的“年龄”,存储他们的“出生日期”。没有内置功能来报告列的更改。我们可以检查当前值并与触发器中新分配的值进行比较,但是我们需要某种机制来将信息从触发器传递给调用方。这也不是内置的功能,所以我们需要决定是使用用户定义的变量,还是使用另一个表。由于UPDATE语句可能会影响多行,因此我们需要决定如何报告多行的结果。此外,
SET id='1',
with
WHERE id='1'
将无法以您期望的方式工作。我认为
id
主自动递增键
这个触发器,它会是什么样子?我会在正确的数据库中配置它,但是如何在php命令的响应中使用它呢?这是主要原因point@WotonSampaio您正在使用PHP。只需选择更新前后的行并比较值即可。@WotonSampaio只想要MySQL,请参阅上面spencer的评论,这也让我有些不知所措。一个额外的查询其实没什么大不了的,除非您在单独的查询中更新数百行。但这里有另一个想法。重新评估是否有必要。有人更新了他们的信息,只需说“你的信息已成功更新”,就可以了。不需要说他们更新了什么。无论如何,他们应该已经知道了。也不要存储他们的“年龄”,存储他们的“出生日期”。第三个查询是不必要的,我可以使用$u POST本身,但这是对的,这是唯一的解决方案第三个查询是不必要的,我可以使用$u POST本身,但这是对的,这是唯一的解决方案