Rollback Restore Last Data

Friday, February 19, 2016

Nota: logid = history ID untuk table history atau table log yang digunakan dalam post ini.

Sambungan post sebelum ini, Rollback Backup Data Secara Manual

Sebelum ini kita membuat rollback merujuk kepada ID backup data (logid) di mana ID itu sudah di pilih siap-siap.

Kali ini, kita lihat bagaimana untuk rollback data yang terakhir sahaja di mana logid tidak diketahui yang mana satu. Bagi mendapatkan logid terakhir, gunakan carian pada timestamp.

Pada contoh ini, kita menganggap ID untuk original data telah diberikan. Dapatkan logid menggunakan SQL.


<?php 
$pkid = $_GET['pkid'];
$logid="";

$sql3 = "SELECT a.logid, a.id, a.timestamp FROM data_log a 
   WHERE a.id='$pkid' 
   AND a.timestamp=(SELECT MAX(a1.timestamp) 
   FROM data_log a1 
   WHERE a1.id='$pkid')";
$result3 = mysql_query($sql3);
while($row3 = mysql_fetch_array($result3))
{
 $logid = $row3["logid"];
}
?>

Setelah logid diperoleh, lakuan arahan seperti yang ditunjukkan pada post sebelum ini.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<?php 
$result = mysql_query("SELECT * FROM data_log limit 1");
if (!$result) {
    die("Query to show fields from table failed");
}

$sql_rollback = "UPDATE data SET ";

$fields_num = mysql_num_fields($result);
//echo "fields_num=".$fields_num;
for($i=3;  $i<$fields_num; $i++)
{
    $field = mysql_fetch_field($result, $i);
//    echo "{$field->name}".$i."<br>";    
}

$result2 = mysql_query("SELECT * FROM data_log WHERE logid = '$logid'");
if (!$result2) {
    echo 'Could not run query: ' . mysql_error();
    exit;
}
$row2 = mysql_fetch_row($result2);
//0 = running LogID 
//1 = Activity log 
//2 = ID for ori table
//3 ~ n = data
for($i=3; $i<$fields_num; $i++)
{
    $field = mysql_fetch_field($result, $i);
 if($i == ($fields_num - 1)){
  $sql_rollback .= "{$field->name} = '".$row2[$i]."'";
 } else {
  $sql_rollback .= "{$field->name} = '".$row2[$i]."', ";
 }
 //echo $row2[$i]; 
}
$field_id = mysql_fetch_field($result, 2);
$sql_rollback .=" WHERE {$field_id->name} = '".$row2[2]."'";
$resultrb = mysql_query($sql_rollback);
?> 

0 comments: