2014-10-08 68 views
1

我有一个PHP程序,它可以根据MySQL数据库上简单的SQL查询中的数据创建一个文件。我想在文件的顶部有一些快速简单的“版本”行,可以快速检查生成的文件是否与保存的文件不同,但如果结果相同,版本应该是相同的(因此,处理时简单的时间戳不会正好工作)。我目前的想法是沿线:MySQL查询结果的版本控制

$con = mysqli_connect("example.com", "abc", "123", "database"); 
$result = mysqli_query($con, "SELECT * FROM table"); 

echo "VERSION: " . some_hash_function($result); 
/* 
* More stuff with $result here 
*/ 

但我不完全确定那会是什么。

没有任何需要有版本的任何种类的订单,只是可以非常快速和有效地检查的东西。

+1

,你可以简单地使用时间戳,也可以保存在桌子上一个版本,每次创建文件增加数量。 – solick 2014-10-08 12:22:07

+0

谢谢@solick。问题是,如果没有任何更改,或者更改已恢复,则版本需要保持不变。我在上面进行了编辑,使其更清晰。 – SCB 2014-10-08 12:27:39

回答

2

您正在寻找CHECKSUM TABLE ...

一个例子是:

mysql> use `database`; 
Database changed 
mysql> CHECKSUM TABLE `table`; 
+----------------+------------+ 
| Table   | Checksum | 
+----------------+------------+ 
| database.table | 2317843275 | 
+----------------+------------+ 

然后可以使用这个数字来比较同一个表,但是从另一个数据库,以确保两个表中包含相同的行/列。

所以在代码中,你可以做这样的事情:

$con = mysqli_connect("example.com", "abc", "123", "database"); 
$result = mysqli_query($con, "CHECKSUM TABLE `table`"); 

echo "VERSION: " . mysqli_fetch_row($result)[0]; 
0

你可以很容易地使用MD5或SHA1: http://php.net/manual/en/function.sha1.php

不知道什么字段是在数据库中,这里有一个简单的片断:

echo "VERSION: " . sha1($result_title . $result_content); 

但时间戳(如注释建议)中mySQL可能会让你更容易,并且不会提供CPU开销。