我正在创建一个新的Web应用程序,我只想在更改数据库时更新某些表,这将通过在JavaScript setInterval中触发PHP脚本来完成。
我的问题是我很难找到一种方法来轻松确定数据库表中的某些行是否已更改。在其他情况下,我使用了“show table status”并将其与我已经存储的最后一次update_time进行了比较。
在这种情况下,我不想查看整个表,我只需要知道查询中的行是否已更改。我最初尝试md5数组,以及数组序列化的md5。似乎它们都不起作用并且每次都返回相同的md5哈希值。
例如,这是我的查询:
$getUserTable = mysql_query("select * from uct_admin.resources where teamID='62' order by ResourceName");
我在阅读答案后想出了解决方案:
$getUserTable = mysql_query("select * from uct_admin.resources where teamID='62' order by csiname");
while ($row = mysql_fetch_assoc($getUserTable)) {
$arrayTest[] = $row;
}
$hash = md5(http_build_query($arrayTest, 'flags_'));
由于从查询返回的嵌套数组,这非常有效。
答案 0 :(得分:4)
我会考虑在TIMESTAMP
更新的表格中添加额外的UPDATE/INSERT
字段,然后您可以查看SELECT MAX(lastModified) WHERE teamID=62
如果您不想更改表格结构,可以在此表格中添加触发器,让它在单独的表格中跟踪每个团队数据的最后更改。
答案 1 :(得分:1)
我创建了一个表来记录所有更改,称为dbLogTable。 ID(外键)和timeStamp将是其列。每次PHP脚本运行时,使用truncate table dbLogTable
清除表。您的PHP脚本可以通过运行COUNT(*) FROM dbLogTable
来检测任何更改,如果没有更改则为零,如果有更改则为非零。然后可以通过外键ID访问所有更改。
免责声明:在数据库工作方面,我是一个菜鸟,所以尽管我可能会这样做,但这可能不是最好的方法。
答案 2 :(得分:0)
(除非有特殊原因,否则我会选择詹姆斯的解决方案)
我做了类似的事情并设法让你提到的哈希解决方案工作正常。从不同的数据中获取相同的哈希值会非常奇怪。
在我的代码中,我正在对数组进行内爆而不是序列化。然后我将哈希存储在数据库中,当我想比较一组新数据时,我在新数据上运行md5并将其与哈希进行比较。
如果它仍然无法工作,我们可能会看到您的代码进行散列和一些示例数据吗?如果这种方法不起作用,我很想知道会发生什么。