Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/242.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP MYSQLi-在更新列之前备份列数据(到另一个表/列中)_Php_Performance_Mysqli_Backup - Fatal编程技术网

PHP MYSQLi-在更新列之前备份列数据(到另一个表/列中)

PHP MYSQLi-在更新列之前备份列数据(到另一个表/列中),php,performance,mysqli,backup,Php,Performance,Mysqli,Backup,我正在开发一个系统,在更新之前,该系统会跟踪现场的情况。我更喜欢使用表来显示以前的数据,但我愿意接受其他选择。这是一些可以完成任务的示例代码: <?php $initial_value = $_POST['some_value']; $id =231212213; // some id $stmt = $mysqli->prepare("SELECT column FROM table WHERE user=?") $stmt->bindParam("s", $id); $

我正在开发一个系统,在更新之前,该系统会跟踪现场的情况。我更喜欢使用表来显示以前的数据,但我愿意接受其他选择。这是一些可以完成任务的示例代码:

<?php

$initial_value = $_POST['some_value'];
$id =231212213; // some id

$stmt = $mysqli->prepare("SELECT column FROM table WHERE user=?")
$stmt->bindParam("s", $id);
$stmt->execute();
$stmt->bind_result($column);
$stmt->fetch();

if ($column !="") {
  //edit : it doesnt matter to me whether the data is moved into a new table or column
  $stmtA = $mysqli->prepare("UPDATE another_table SET backup_column=? WHERE user=?");
  $stmtA->bindParam("ss", $column, $id);
  $stmtA->execute();

  $stmtB = $mysqli->prepare("UPDATE table SET column=? WHERE user=?");
  $stmtB->bindParam("ss", $initial_value, $id);
  $stmtB->execute();
}

?>

这是一个纯mysql命令解决方案,您可以通过修改代码来实现:

1.) CREATE TABLE new_table_name LIKE old_table_name
2.) INSERT INTO new_table_name SELECT * FROM old_table_name
完成。;-)

通过这种方式,您可以对以前的表进行精确备份,并且联接很容易看出差异:

SELECT a.*, b.* FROM old_table a JOIN new_table b ON a.id=b.id WHERE <criteria>;

为什么不添加一个名为“previous_val”的列呢?数据是否将移动到新表或列对我来说并不重要。从数据使用的角度来看,添加一个列比添加一个表(a)主键、b)外键和c)值更有意义。如我所说,这并不重要。较旧的数据将保留用于统计。几乎不会有人质疑它。我在考虑一个表,因为有20多列需要这样做,所以为了清楚起见。您可以1个查询:updatetable set backup_column=column,column=?其中user=?除非您希望保留历史更改,否则请使用另一个表或带有更改说明的文本字段,前提是该表已创建且列已设置。我正在尝试将数据从表更新到另一个表。在备份表中,我将把新数据添加到适当的列中。我相信这需要一个
连接
,但我不确定如何格式化它。你能写代码吗?你能给出一个你想要的数据例子吗?如果编辑了第1行,您只想更新第1行还是复制整个表?我的编辑将更新备份表中的相应行。我也不知道您的表是否为每一行包含唯一的用户id,或者是否有许多具有相同id的行。我有新数据(来自表单或其他什么),但在我使用新数据更新当前表之前,我想获取位于其中的数据并将其移动到备份表(具有类似列(“备份”)在前面。然后像往常一样,我想用表单数据更新原始表。好的。我的问题更多的是关于你的数据。。。表中的每个系统用户是否都由用户id标识?如果是这样,您的系统中的每个用户在表中是否只有一行?或者您的表中有一个用户,其中有几行。每个用户由两个表中的用户id(主键)定义
UPDATE BACKUP SET COLUMN = (SELECT COLUMN FROM TABLE WHERE user_id=#) WHERE user_id=#;