Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何连续监视mysql数据库中的表并触发php脚本来处理它?_Php_Mysql_Monitoring - Fatal编程技术网

如何连续监视mysql数据库中的表并触发php脚本来处理它?

如何连续监视mysql数据库中的表并触发php脚本来处理它?,php,mysql,monitoring,Php,Mysql,Monitoring,我想做的是监视mysql中的一个表,它总是由sms网关自动更新 应持续监视脚本,一旦表中有新条目,应触发执行进一步操作的php脚本ritn 如何实现这一点?我建议在您的表中添加一个后更新。 每次更新记录时,都会自动执行触发器代码 触发器中的代码是一系列MySQL语句。Jocelyn为一个有文档的项目提出了一个非常好的解决方案,否则它将成为其他开发人员想要更改任何内容的杀手,因为它总是被忽略 更新后MySQL的限制是它只能运行SQL,不能运行PHP脚本。因此,最好的解决方案是每*分钟运行一次作业,

我想做的是监视mysql中的一个表,它总是由sms网关自动更新

应持续监视脚本,一旦表中有新条目,应触发执行进一步操作的php脚本ritn


如何实现这一点?

我建议在您的表中添加一个后更新。
每次更新记录时,都会自动执行触发器代码


触发器中的代码是一系列MySQL语句。

Jocelyn为一个有文档的项目提出了一个非常好的解决方案,否则它将成为其他开发人员想要更改任何内容的杀手,因为它总是被忽略


更新后MySQL
的限制是它只能运行SQL,不能运行PHP脚本。因此,最好的解决方案是每*分钟运行一次作业,启动一个PHP脚本,检查自动递增字段(如
id
字段)的最后一个值,例如,使用mysql\u insert\u id。使用此逻辑的原因是您不想检查行数,因为其中一些行可能已被删除。

我使用cron做了很多次。因此,php脚本首先查看是否有新条目,然后在有新条目时执行它需要执行的操作。如果没有工作,它会立即退出。需要记住的一件事是,如果脚本需要很长时间才能运行,您需要确保cron作业被相应地设置,这样它们就不会重叠

实现这一点的一个简单方法是在表中有一个特殊的列,它指示该行是否已被php脚本检查过。因此,当php脚本运行时,它会查找包含该字段false的所有数据。大概是这样的:

SELECT id from my_table where dealt_with = FALSE;
然后在这些行上运行时,它会更新这些行:

UPDATE my_table set dealt_with = TRUE where id=1234;

php开始更新的时间需要是即时的吗?如果不是cron作业,那么每分钟检查一次就足够了。我不清楚您的问题,但请使用长轮询和Comet查找Ajax。我认为您应该将搜索细化为cron-job!从SMS网关接收消息并使用它们更新表的代码在哪里/是什么?你能让这个脚本在更新时调用所需的PHP脚本吗?但是我需要立即退出PHP脚本!我可以将分钟数设置为0.1或其他值,使其成为check/sec或check/2sec吗?当然,请阅读有关CRON的文章,它很容易使用,并且有几十个教程。我意识到这很古老,但对于像我这样偶然发现这一点的人来说,这可能会有所帮助。我的建议是混合型的。使用更新后触发器填充一个临时表,该表将保存最近插入的行的键。在CRON运行的PHP脚本中,让它检查临时表中需要编写脚本的主表的id。运行PHP脚本后,截断临时表。这样,您就不会经常访问主表。只有当有记录需要处理时,MySQL才会更新很多,事实上,每个记录都会更新一次,这对于高负载的项目来说是相当沉重的。如果您在某个时间间隔(如一分钟)上运行CRON,那么在插入时插入一个额外的字段
time\u created
,然后简单地
从my\u table WHERE NOW()-time\u created<60
?@Vlakarados:您可能是对的,但这种方法对我来说有点脆弱:即。,如果它在批处理过程中完成一半,然后死亡,当它重新启动时会发生什么?是的,如果你的主机不可靠,如果更新确实是强制性的,你应该担心这一点。我不是说你的方法不好,我只是建议。您可以让CRON作业触发另一个脚本,该脚本保留它处理过的最后一行id,例如在某个txt文件中,或者更好的脚本memcache中。这实际上取决于应用程序的要求,但是如果作者说他想每1-2秒检查一次新行,我可以建议这个项目将是相当高的负载。