PHP-MySQL:检查表的数据是否已修改而没有触发器和UDF?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了PHP-MySQL:检查表的数据是否已修改而没有触发器和UDF?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1511字,纯文字阅读大概需要3分钟。
内容图文
![PHP-MySQL:检查表的数据是否已修改而没有触发器和UDF?](/upload/InfoBanner/zyjiaocheng/885/c47042d2e371408891fb635791022ff4.jpg)
有没有办法知道MySQL表的数据是否已被修改?
解决方法:
在与@Voitcus聊天时,我们发现InnoDb表无法使用information_schema方法.对于此类表,UPDATE_TIME列将为NULL.
这就是为什么我们为InnoDB表制定了一种解决方案,该解决方案不需要对硬盘上db文件的读取访问权限(我认为这是一个安全问题,没有管理员应该允许这样做,而且db服务器也可以位于其他主机上)
解:
如您所说,您不能为此使用触发器函数,您必须在PHP的应用程序级别修复此问题.更新:请注意,在当前版本的MySQL中,无论如何都不能使用触发器,因为不会在级联外键操作上调用它们.
首先创建一个表,让我们说一下统计信息:
CREATE TABLE `yourdb`.`stats` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`table_name` VARCHAR( 255 ) NOT NULL ,
`last_update` DATETIME NOT NULL
) ENGINE = InnoDB;
为应用程序中的每个表插入一行.
在PHP中,修改现有查询,以便它们使用事务并更新stats表.例如,可以使用mysqli或PDO.我在这里使用PDO,例如,我们删除一行.
try {
$pdo = new PDO($host, $user, $pass, $db, array((
// this option is nice when working with transactions
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
));
} catch (PDOException $e) {
die('cannot connect to mysql');
}
try {
// start transaction
$pdo->beginTransaction();
// delete a row
$pdo->query('DELETE FROM `table1` WHERE `id` = 1');
// update stats
$pdo->query('UPDATE `stats` SET `last_update` = NOW() WHERE `table_name` = `table1`');
// commit both queries at once
$pdo->commit();
} catch (Exception $e) {
// rollback both queries if one of them failed
$pdo->rollback();
}
现在,您可以使用以下查询获取上次更新时间:
SELECT `last_updated` FROM `stats` WHERE `table_name` = 'table1'
内容总结
以上是互联网集市为您收集整理的PHP-MySQL:检查表的数据是否已修改而没有触发器和UDF?全部内容,希望文章能够帮你解决PHP-MySQL:检查表的数据是否已修改而没有触发器和UDF?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。