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

时间:2012-08-02 16:03:35

标签: 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);
$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();
}

?>

1 个答案:

答案 0 :(得分:1)

这是一个纯粹的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>;

修改

UPDATE BACKUP SET COLUMN = (SELECT COLUMN FROM TABLE WHERE user_id=#) WHERE user_id=#;